Тема не игровая,может ближе к задачам, но именно в Играх завязываются коллективные проекты,
поэтому решил разместиться здесь.
Сначала теория. Человеский естественный язык, речь, согласно данным современной лингвистики весьма структурирована и насыщена различными структурами.
В языке можно выделить, например, такие понятийные пласты:
1. Классификационные понятия. Обычные понятия обычного разговорного языка, отражающие предметное многообразие мира вокруг нас. Около 100-200 тыс.слов.
(Дом, стол, стул, дерево-это все они. Могут иметь множество уровней вложенности, но здесь речь не о них).
2. Антонимы, или бинарные оппозиции. Отражают противоположные качества либо стороны предметов.
(жесткий-мягкий, холодный-горячий, длинный короткий и т.д.
Сам насобирал около 30 пар).
Ну, теперь дошел до проектной части. Решил создать программу, народобие тестов, но с более сложной лингвистической и логической структурой. (Пока речь не о коде Паскаля, а логической упорядоченности).
Пользователь вводит свое имя и название объекта, допустим "сад", затем программа спрашивает у него
"Сад большой или маленький?" С вариантами ответа,
затем, к примеру "темный или светлый?" ит.д.
В конце выдает "сад большой/светлый".
Вот что получилось...
Program AntonimicheskajaModel;
Uses Crt;
Var a:char; i1,i2,p1,p2:integer;
m:array[0..100] of string;
c,ob,s:string;
begin {program}
m[1]:='БОЛЬШОЙ'; m[2]:='МАЛЕНЬКИЙ'; m[3]:='НЕ БОЛЬШОЙ, НЕ МАЛЕНЬКИЙ';
m[4]:='И БОЛЬШОЙ, И МАЛЕНЬКИЙ'; m[5]:='СКОРЕЕ БОЛЬШОЙ';
m[6]:='СКОРЕЕ МАЛЕНЬКИЙ';
m[7]:='ТВЕРДЫЙ'; m[8]:='МЯГКИЙ';m[9]:='НЕ ТВЕРДЫЙ, НЕ МЯГКИЙ';
m[10]:='И ТВЕРДЫЙ, И МЯГКИЙ'; m[11]:='СКОРЕЕ ТВЕРДЫЙ';
m[12]:='СКОРЕЕ МЯГКИЙ';
writeln ('КАК ВАШЕ ИМЯ?');
readln©;
writeln (' НАЗВАНИЕ ОБЪЕКТА ИЗУЧЕНИЯ?');
readln(ob);
writeln(' ЗДРАВСТВУЙТЕ, ',c);
writeln(' ПРИСТУПИМ К ИЗУЧЕНИЮ ОБЪЕКТА " ',ob,' "(Y/N)?');
readln(a);
if a='y' then
begin
writeln(' ОБЪЕКТ БОЛЬШОЙ ИЛИ МАЛЕНЬКИЙ?');
writeln(' ВАРИАНТЫ ОТВЕТА:');
writeln(' 1-БОЛЬШОЙ, 2-МАЛЕНЬКИЙ ');
writeln(' 3-НЕ БОЛЬШОЙ, НЕ МАЛЕНЬКИЙ, 4-И БОЛЬШОЙ, И МАЛЕНЬКИЙ ');
writeln(' 5-СКОРЕЕ БОЛЬШОЙ, 6-СКОРЕЕ МАЛЕНЬКИЙ ');
read(p1); i1:=p1;
writeln(' ОБЪЕКТ ТВЕРДЫЙ ИЛИ МЯГКИЙ?');
writeln(' ВАРИАНТЫ ОТВЕТА:');
writeln(' 1-ТВЕРДЫЙ , 2-МЯГКИЙ ');
writeln(' 3-НЕ ТВЕРДЫЙ , НЕ МЯГКИЙ, 4-И ТВЕРДЫЙ, И МЯГКИЙ ');
writeln(' 5-СКОРЕЕ ТВЕРДЫЙ, 6-СКОРЕЕ МЯГКИЙ ');
read(p2); i2:=p2+6;
if p1=i1 then begin
writeln('******************');
writeln('ОБЪЕКТ ',ob,' ' , m[i1]);
writeln( m[i2]);
end;
end;
if a='n' then writeln(' ПРОЩАЙТЕ ',c);
readkey;
end.
Не думаю, что можно классифицировать объекты антонимами, так как все эти понятия (большой-маленький, короткий-длинный) очень относительны. Например я могу сказать, что объект горячий только сравнив его с другим. А ты пытаешься использовать антонимы так, как будто их значения имеют смысл сами по себе...
Archon, хорошее замечание.
Но ты прав лишь частично.
Язык ведь описывает мир? Каждое понятие
несет "зазмазанный круг смыслов", оно астрактно,
но, если точно подбирать слова, точность описания возрастает.
Вообще, этим вопросом занималась философия, начиная с досократиков, затем Сократ, средневековые споры "номиналистов" с "реалистами", немецкая классическая философия, марксиская философия.
Разные школы отвечали на него по разному...
В последней (вообще я далеко не марксист, и не материалист, но некоторые наработки советских философов из-за этого не выбрасываю) этот вопрос решался как "расхождение от абстрактного к конкретному", происходящий пошагово.
Но подвигаю философию в сторону. Абсолютного решения эта задача не имеет, но имеет практические аспекты.
Выкладываю улучшенную версию программы,
Используются бинарные пары "большой-маленький",
"теплый-холодный ", "белый-черный" и "жесткий-мягкий". "
Program AntonimicheskajaModel2;
Uses Crt;
Var a:char;
i1,p1,i2,p2,i3,p3,i4,p4:integer;
m:array[0..100] of string;
c,ob:string;
begin {program}
m[1]:='БОЛЬШОЙ'; m[2]:='МАЛЕНЬКИЙ';
m[3]:='НЕ БОЛЬШОЙ, НЕ МАЛЕНЬКИЙ'; m[4]:='И БОЛЬШОЙ, И МАЛЕНЬКИЙ
m[5]:='СКОРЕЕ БОЛЬШОЙ'; m[6]:='СКОРЕЕ МАЛЕНЬКИЙ';
{***********************}
m[7]:='ТЕПЛЫЙ'; m[8]:='ХОЛОДНЫЙ';
m[9]:='НЕ ТЕПЛЫЙ, НЕ ХОЛОДНЫЙ'; m[10]:='И ТЕПЛЫЙ, И ХОЛОДНЫЙ';
m[11]:='СКОРЕЕ ТЕПЛЫЙ'; m[12]:='СКОРЕЕ ХОЛОДНЫЙ';
{***********************}
m[13]:='БЕЛЫЙ'; m[14]:='ЧЕРНЫЙ';
m[15]:='НЕ БЕЛЫЙ, НЕ ЧЕРНЫЙ'; m[16]:='И БЕЛЫЙ, И ЧЕРНЫЙ';
m[17]:='СКОРЕЕ БЕЛЫЙ'; m[18]:='СКОРЕЕ ЧЕРНЫЙ';
{***********************}
m[19]:='ЖЕСТКИЙ'; m[20]:='МЯГКИЙ';
m[21]:='НЕ ЖЕСТКИЙ, НЕ МЯГКИЙ'; m[22]:='И ЖЕСТКИЙ, И МЯГКИЙ';
m[23]:='СКОРЕЕ ЖЕСТКИЙ'; m[24]:='СКОРЕЕ МЯГКИЙ';
{***********************}
writeln ('КАК ВАШЕ ИМЯ?');
readln©;
writeln (' НАЗВАНИЕ ОБЪЕКТА ИЗУЧЕНИЯ?');
readln(ob);
writeln(' ЗДРАВСТВУЙТЕ, ',c);
writeln(' ПРИСТУПИМ К ИЗУЧЕНИЮ ОБЪЕКТА " ',ob,' "(Y/N)?');
readln(a);
if a='y' then
begin
writeln(' ОБЪЕКТ БОЛЬШОЙ ИЛИ МАЛЕНЬКИЙ?');
writeln(' ВАРИАНТЫ ОТВЕТА:');
writeln(' 1-БОЛЬШОЙ, 2-МАЛЕНЬКИЙ ');
writeln(' 3-НЕ БОЛЬШОЙ, НЕ МАЛЕНЬКИЙ, 4-И БОЛЬШОЙ, И МАЛЕНЬКИЙ ');
writeln(' 5-СКОРЕЕ БОЛЬШОЙ, 6-СКОРЕЕ МАЛЕНЬКИЙ ');
read(p1); i1:=p1; clrscr;
writeln(' ОБЪЕКТ ТЕПЛЫЙ ИЛИ ХОЛОДНЫЙ?');
writeln(' ВАРИАНТЫ ОТВЕТА:');
writeln(' 1-ТЕПЛЫЙ, 2- ХОЛОДНЫЙ');
writeln(' 3-НЕ ТЕПЛЫЙ, НЕ ХОЛОДНЫЙ, 4-И ТЕПЛЫЙ, И ХОЛОДНЫЙ ');
writeln(' 5-СКОРЕЕ ТЕПЛЫЙ, 6-СКОРЕЕ ХОЛОДНЫЙ ');
read(p2); i2:=p2+6; clrscr;
writeln(' ОБЪЕКТ БЕЛЫЙ ИЛИ ЧЕРНЫЙ ?');
writeln(' ВАРИАНТЫ ОТВЕТА:');
writeln(' 1-БЕЛЫЙ, 2- ЧЕРНЫЙ');
writeln(' 3-НЕ БЕЛЫЙ, НЕ ЧЕРНЫЙ, 4-И БЕЛЫЙ, И ЧЕРНЫЙ ');
writeln(' 5-СКОРЕЕ БЕЛЫЙ, 6-СКОРЕЕ ЧЕРНЫЙ ');
read(p3); i3:=p3+12; clrscr;
writeln(' ОБЪЕКТ ИЛИ ?');
writeln(' ВАРИАНТЫ ОТВЕТА:');
writeln(' 1-ЖЕСТКИЙ, 2- МЯГКИЙ');
writeln(' 3-НЕ ЖЕСТКИЙ, НЕ , 4-И ЖЕСТКИЙ, И МЯГКИЙ ');
writeln(' 5-СКОРЕЕ ЖЕСТКИЙ, 6-СКОРЕЕ МЯГКИЙ ');
read(p4); i4:=p4+18; clrscr;
if p1=i1 then begin
writeln('******************');
writeln('ОБЪЕКТ ',ob, ' ',m[i1]);
writeln(m[i2]);
writeln(m[i3]);
writeln(m[i4]);
end;
end;
if a='n' then writeln(' ПРОЩАЙТЕ ',c);
readkey; clrscr;
end.
Блин, ошибся. В строке
m[4]:='И БОЛЬШОЙ, И МАЛЕНЬКИЙ
m[4]:='И БОЛЬШОЙ, И МАЛЕНЬКИЙ';
Тысяча извинений за опечатки...
read(p3); i3:=p3+12; clrscr;
writeln(' ОБЪЕКТ ИЛИ ?');
writeln(' ВАРИАНТЫ ОТВЕТА:');
read(p3); i3:=p3+12; clrscr;
writeln(' ОБЪЕКТ ЖЕСТКИЙ ИЛИ МЯГКИЙ?');
writeln(' ВАРИАНТЫ ОТВЕТА:');
Archon, забыл сказать одну важную вещь. Понятия можно сравнивать друг с другом. Так можно получить не только антонимы, но и градации по убыванию либо возрастанию одного и того же качества. Это более сложное явление, ГРАДУАЛЬНАЯ АНТОНИМИЯ, решил её пока не включать.
Вот смотри...(Пример не 100% корректен и единицы в нем условны-у.е. , но не U$D/Шутка/)
прекрасный(+5)-очаровательный(+4)-красивый(+3)-замечательный(+2)-хороший(+1)-обычный(0)-посредственный(-1)-неприглядный(-2)-плохой(-3)-скверный(-4)-безобразный(-5).
Многоуважаемый модератор Volvo!
Program AntonimicheskajaModel3;
Uses Crt;
Var a:char;
i1,p1,i2,p2,i3,p3,i4,p4:integer;
m:array[0..100] of string;
c,ob:string;
begin {program}
{здесь все, как в предидущем варианте}
................................
if p1=i1 then begin
writeln('******************');
writeln('ОБЪЕКТ ',ob, ' ',m[i1]);
writeln(m[i2]); writeln(m[i3]); writeln(m[i4]);
end;
if frac(p1/2)>0 then i1:=i1+1 else i1:=i1-1;
if frac(p2/2)>0 then i2:=i2+1 else i2:=i2-1;
if frac(p3/2)>0 then i3:=i3+1 else i3:=i3-1;
if frac(p4/2)>0 then i4:=i4+1 else i4:=i4-1;
writeln('******************');
writeln('ОБРАЩЕННЫЙ (ИНВЕРСНЫЙ) ОБЪЕКТ ',ob, ' ',m[i1]);
writeln(m[i2]); writeln(m[i3]); writeln(m[i4]);
end;
if a='n' then writeln(' ПРОЩАЙТЕ ',c);
readkey; clrscr;
end.
Замечание о РАЗМЕРЕ ты предпочел оставить без внимания?
Представим, что в ЭТУ же программу тебе надо добавить еще 4 пары антонимов и КАЖДЫЙ из них будет классифицироваться не по 6, а по 8 градациям... Вопрос: сколько мест в программе ты вынужден будешь менять?
В замечании модератора volvo увидел потаенный смысл.
Стоп! Сам себе думаю...
Да, линейная структура моей программы ограничена.
Прогу надо делать на массивах, файлах или процедурах, с циклами.
Решил сделать на массивах и циклах, с заполнением с клавиатуры.
Когда он намекал на это, то наверно подразумевал нечто
подобное (а может, гораздо лучше). Если это так,
то БОЛЬШОЙ ПРОФЕССИОНАЛ этот volvo.
(Но и зануда он тоже не малая...)
Вот программа:
program AntonimSyperModel;
uses crt;
const t=6;
var i,j,k,l:integer; a:char;
m:array[0..20] of string;
n:array[0..100] of string;
d:array[0..20] of integer;
c,ob:string;
begin
clrscr; i:=0; j:=0; k:=0; l:=0;
writeln('ВВЕДИТЕ АНТОНИМЫ');
while (i<t) do
begin
readln(m[i]); i:=i+1;
end;
while (j<t) do
begin
n[j]:='Не '+m[j]+' Не '+m[j+1]; n[t+j]:=' И '+m[j]+' И '+m[j+1];
n[2*t+j]:='СКОРЕЕ '+m[j]; n[3*t+j]:='СКОРЕЕ '+m[j+1];
j:=j+2;
end;
clrscr;
writeln ('КАК ВАШЕ ИМЯ?');
readln©;
writeln (' НАЗВАНИЕ ОБЪЕКТА ИЗУЧЕНИЯ?');
readln(ob);
writeln(' ЗДРАВСТВУЙТЕ, ',c);
writeln(' ПРИСТУПИМ К ИЗУЧЕНИЮ ОБЪЕКТА " ',ob,' "(Y/N)?');
readln(a);
if a='y' then
begin
clrscr;
while (k<t) do begin
writeln('ОБЪЕКТ " ',ob,'" ',m[k], ' ИЛИ ', m[k+1] );
writeln('ВАРИАНТЫ ОТВЕТА');
writeln('1- ', m[k]); writeln('2- ',m[k+1]);
writeln('3- ', n[k]); writeln('4- ',n[k+t]);
writeln('5- ', n[k+2*t]); writeln('6- ', n[k+3*t]);
readln(d[k]); clrscr;
k:=k+2;
end;
clrscr;
writeln('ОБЪЕКТ " ',ob,' "');
while (l<t) do begin
if d[l]=1 then writeln(m[l]);
if d[l]=2 then writeln(m[l+1]);
if d[l]=3 then writeln(n[l]);
if d[l]=4 then writeln(n[l+t]);
if d[l]=5 then writeln(n[l+2*t]);
if d[l]=6 then writeln(m[l+3*t]);
l:=l+2;
end;
end;
if a='n' then writeln(' ПРОЩАЙТЕ ',c);
readkey; clrscr;
end.
Решил сам выложить последнюю (на данный момент)
версию программы с результатами тестов.
Добавлена операция "АНТИНОМИИ" (не путать с антонимией!).
_________________.txt ( 6.07 килобайт )
Кол-во скачиваний: 569