Массивы, индексирование. Подводка к идеям Систем Управления Баз Данных. Очевидные проблемы в применении процедурно-ориентированных языков программирования

Последний релиз логической задачи см. здесь.

Аудиозапись 10_01 и 10_02.

Задание. Тест от Эйнштейна. Не желаете ли определить, принадлежите вы к 2% интеллектуальных людей или нет? Постарайтесь решить эту задачу. Без фокусов, только логика. Альберт Эйнштейн составил ее в начале 20-го века. Он утверждал, что 98% населения не сумеют ее решить. Прав ли великий ученый?


Итак, на одной улице стоят 5 домов, окрашенных в 5 разных цветов. В каждом доме живет гражданин другой страны. Каждый из них пьет свой напиток, курит свои сигареты и содержит свое домашнее животное. Определите, кто из них содержит рыб?
1. Британец живет в красном доме.
2. У шведа есть собака.
3. Датчанин пьет чай.
4. Зеленый дом стоит слева от белого и вплотную к нему.
5. Хозяин зеленого дома пьет кофе.
6. У того, кто курит Pall Mall, есть птицы.
7. Хозяин желтого дома курит Dunhill.
8. Хозяин среднего дома пьет молоко.
9. Норвежец живет в первом доме.
10. Человек, который курит Blends, живет рядом с хозяином котов.
11. Тот, кто содержит лошадей, живет рядом с тем, кто курит Dunhill.
12. Тот, кто курит Blue Master, пьет пиво.
13. Немец курит Prince.
14. Норвежец живет рядом с синим домом.
15. У того, кто курит Blends, есть сосед, который пьет воду.


Задача-минимум. Написать программу, в которой на экране было бы нечто вида

Prince
|
Blue Master
|
Pall Mall
|
Dunhill
|
Blends
аквариумные рыбки
|
собака
|
птицы
|
коты
|
лошади
вода
|
кофе
|
чай
|
молоко
|
пиво
британец
|
швед
|
датчанин
|
норвежец
|
немец
красный
|
зелёный
|
белый
|
жёлтый
|
синий

 

После этого нужно дать возможность пользователю вызывать меню.

В меню для начала пусть будут два пункта:


Вывод на экран элементов массива с позиционированием

Разберём условия задачи:

Массив 1

   
j=1
j=2
j=3
j=4
j=5
i=1 Способ испортить воздух Prince Blue Master Pall Mall Dunhill Blends
i=2 Живое существо, страдающее от вредной привычки хозяина аквариумные рыбки собака птицы коты лошади
i=3 Любимый напиток вода кофе чай молоко пиво
i=4 Нация домовладельца британец швед датчанин норвежец немец
i=5 Цвет дома красный зелёный белый жёлтый синий

Очевидно, что приведен элемент двумерного строчного массива.

401 - Программа умеет только лишь заполнять первую строку массива и выдавать всё содержимое массива на экран, причём при выводе на экран элементы отделяются друг от друга двумя пробелами. Чтобы быстрее (и без опечаток заполнить массив, я скопировал всё содержимое таблицы Массив 1 в буфер, перешёл в Word, вставил содержимое буфера, выбрал "Файл-> Сохранить как.. и в типе файла указал 'Текст MS-DOS с форматированием'", получился следующий файл).

402 - Программа умеет только лишь заполнять первую строку массива при этом готовы инструкции по заполнению всех прочих строк (я выверял, что по столбцам идут цифры 2,3,4,5).

403 - Программа умеет заполнять массив целиком.

404 - Программа умеет выдавать массив на экран в табличном виде.

Вид экрана 1 с массивом в естественном виде.


Индексный массив, как способ упрощённого решения управления выводом при отображении основного массива

На протяжении решения всей задачи оригинальный массив меняться не должен. Поэтому введём соответствующий ему массив, который будет управлять первым, указывая местоположение элементов:

Массив 2

Способ испортить воздух 1 2 3 4 5
Живое существо, страдающее от вредной привычки хозяина 1 2 3 4 5
Любимый напиток 1 3 2 5 4
Нация домовладельца 1 2 3 4 5
Цвет дома 5 4 3 2 1

Я намеренно указал обратную нумерацию (цвет дома) и изменённую нумерацию (любимый напиток), чтобы это проверить.

Чтобы его не набирать заново, я сохранил эту таблицу вышеописанным образом в следующий файл.


Простейшее управление с помощью клавиш движения курсора


С первой группой десятое занятие закончилось.


Аудиозапись 11_01 и 11_02.

Игры с цветом

Вплоть до данного момента программа лишь стремиласть догнать по своим возможностям листочек бумаги, поделённый на 25 равных частей, на которых были написаны ключевые слова.

Результатные EXE-файлы.


С первой группой одиннадцатое занятие закончилось.


Понятие связывания элементов в базе данных (простейшее Один-к-Одному)

Аудиозапись 12_01, 12_02, 12_03 и 12_04.

Необходимо вводить увязку элементов массива (в языках СУБД - SET RELATION TO). Можно бы сделать и интерфейс заполнения этого массива, но это я оставлю на будущее.

Массив 3

Элемент из строки i и столбца j Связан с элементом из строки i и столбца j Например
4
1
5
1
1. Британец живет в красном доме
4
2
2
2
2. У шведа есть собака
4
3
3
3
3. Датчанин пьет чай
5
2
3
2
5. Хозяин зеленого дома пьет кофе
1
3
2
3
6. У того, кто курит Pall Mall, есть птицы
5
4
1
4
7. Хозяин желтого дома курит Dunhill
1
2
3
5
12. Тот, кто курит Blue Master, пьет пиво.
4
5
1
1
13. Немец курит Prince.

Результатные EXE-файлы.


С первой группой двенадцатое занятие закончилось.

Всё дальнейшее - на самостоятельное изучение.



Для "крутых"

В Массиве 3 остались необработанными условия:

4. Зеленый дом стоит слева от белого и вплотную к нему.
8. Хозяин среднего дома пьет молоко.
9. Норвежец живет в первом доме.
10. Человек, который курит Blends, живет рядом с хозяином котов.
11. Тот, кто содержит лошадей, живет рядом с тем, кто курит Dunhill.
14. Норвежец живет рядом с синим домом.
15. У того, кто курит Blends, есть сосед, который пьет воду.

 

Эти условия можно дитализировать:



АЛЬТЕРНАТИВНОЕ решение задачи Эйнтштейна методами СУБД

Предыдущее решение является visual-решением (пользователь на экране видит, что у него получается).

Prince Blue Master Pall Mall Dunhill Blends
аквариумные рыбки собака птицы коты лошади
вода кофе чай молоко пиво
британец швед датчанин норвежец немец
красный зелёный белый жёлтый синий

Это решение можно преобразовать в систему связей:

СВЯЗИ ЭЛЕМЕНТОВ ДРУГ С ДРУГОМ:

Возможные замены значения "не определено": в той же колонке, не связан, в левой от меня и т.д.

СВЯЗИ ЭЛЕМЕНТОВ С КОНКРЕТНЫМ МЕСТОМ

 

С точки зрения приведенных методов каждое из 15 условий задачи заменяет неопределенное значение для одного элемента (или взаимосвязанных элементов). Например: "1. Британец живет в красном доме.", Следовательно

красный зелёный белый жёлтый синий
британец в той же колоке не в той же колонке не в той же колонке не в той же колонке не в той же колонке
швед не в той же колонке не определено не определено не определено не определено
датчанин не в той же колонке не определено не определено не определено не определено
норвежец не в той же колонке не определено не определено не определено не определено
немец не в той же колонке не определено не определено не определено не определено

Курсивом я выделил все ячейки, в которых поменялись значения при применении первого условия.

Кто-нибудь сумеет доделать задачу без моих подсказок так, чтобы компьютер при применении условий её мог решить автоматически?



Используются технологии uCoz