Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная по КП.doc
Скачиваний:
7
Добавлен:
16.12.2013
Размер:
203.78 Кб
Скачать

Министерство образования Российской Федерации

Государственное образовательное учреждение

высшего профессионального образования

ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ УПРАВЛЕНИЯ

ИНСТИТУТ ЗАОЧНОГО ОБУЧЕНИЯ

Кафедра «Компьютерных технологий»

Контрольная работа

«Алгоритмизация и программирование задач в различных программных средах»

по дисциплине:

«Компьютерная подготовка»

Выполнила студентка

№ группа

студенческий билет №

ВАРИАНТ № 7

Проверил(а):

Москва 2005 г.

6.2.1. Задания на алгоритмизацию и программирование задач на массивы.

7. Пять парфюмерных фирм представили на конкурс по пять различных наименований духов. Опросили N человек. Каждый из опрошенных назвал не более трех наименований духов. Определить наименование духов и фирму – изготовитель, которые назвали чаще других. Предусмотреть проверку правильности ввода информации.

Да

Нет

Нет

Да

Нет

Да Нет

Нет Да

Нет

Да

Да

Нет

Нет

Да

Нет

Да

Код программы:

Program Zadacha1;

Uses Crt; {Подключение модуля CRT}

Const

proiz: array [1..5] of string = {Массив производителей}

('"Богатырь"','"Заря"','"Октябрь"','"Жемчужина"','"Nivea"');

duhi: array [1..5,1..5] of string = {Двумерный массив духов}

(('ландыш','шарм','boos','москва','волга'), {Представленные фирмами}

('роза','ромашка','life','reno','тюльпан'),

('good','мила','праздник','свобода','край'),

('аполр','вагеом','доренк','смоп','кенвап'),

('fehd','typor','dfon','roitre','weryt'));

Var

x, y, i: Integer; {Вспомогательные счетчики используемые в циклах}

golosa: array [1..5,1..5] of byte; {Двумерный массив в котором хранятся данные}

{для каждых духов сколько людей их выбрало}

Procedure mStr(s1: String; var s2:String); {s1 – исходная строка; s2 – преобразованная строка}

{Процедура перевода больших букв в маленькие.}

var

i: Integer; {Счетчик}

c: Char; {Символ для преобразования}

begin

s2:=''; {Переменная для выходной строки обнуляется}

for i:=1 to Length(s1) do

begin

c:=s1[i];

if ((c>='A') and (c<='Z')) or ((c>='А') and (c<='П')) then

c:=chr(ord(c)+32) {В цикле проверяется очередной символ}

else if (c>='Р') and (c<='Я') then {входной строки. Если этот символ большой}

c:=chr(ord(c)+80); {то он преобразовывается в маленький}

s2:=s2+c {преобразованный символ добавляется к выходной строке}

end

end; {mStr}

Procedure Sravn (s3: String); (s3 – входная строка с одним вариантом духов)

{Процедура сравнивает введенный вариант духов с представленными на конкурсе}

var

Vern: Boolean; {Логическая переменная которая принимает значение True – если

введенный вариант верный, False – если введенный вариант отсутствует в матрице духов}

begin

Vern:= False;

For x:=1 to 5 do

For y:=1 to 5 do

If s3=duhi[x,y] Then {сравнивает вариант духов}

begin

inc(golosa[x,y]); {Если такой вариант существует то для данных духов}

Vern:=True; {увеличиваем на 1 голос (сколько за духи проголосовали)}

Break {как только был найден вариант духов, досрочно выходим}

end;

If not Vern Then WriteLn('Один или несколько из введенных вариантов не совпадает с представленными, он не будет зачтен.');

end;

Procedure Raspoz(stroka: String); {strokа – входная строка содержащая варианты духов, одного опрошенного человека. Процедура предназначена для разбора строки с вариантами духов и выделение из нее по одному варианту.}

var

NachSl, ExitPr, Pr: Boolean; {Логические переменные. NachSl – True–слово началось,}

{False – слово либо закончилось либо пока не началось; ExitPr True – уже найдено три варианта духов и используется чтобы больше не рассматривать входную строку, False – наоборот.}

kol, m: Integer; {kol – счетчик количества вариантов духов; m - счетчик}

s2: String; {s2 – строка в которую записывается один вариант духов и передается на сравнение с имеющимися}

begin

s2:=''; {Задание начальных условий}

NachSl:=False;

kol:=0;

ExitPr:=False;

Pr:=False;

For m:=1 to Length(Stroka) do {Цикл входной строки от 1-го символа до последнего}

begin

If not NachSl Then {Проверка если слово не началось то ищется первый значащий}

Begin {символ, т.е. отбрасываются лишние пробелы и проверочный}

If (Stroka[m]=' ') or (Stroka[m]=',') then {символ ‘,’}

continue

Else

begin

NachSl:=True; {Если найден значащий символ, записываем посимвольно}

s2:=s2+Stroka[m]; {вариант духов в строку s2}

end;

end

Else If NachSl Then {Если слово началось, ищем окончание слова, или просто}

Begin {дописываем в s2}

If Stroka[m]=',' Then

begin

NachSl:=False; {Как только найдено окончание слова передать его на}

Sravn(s2); {сравнение и вернуть переменным (кроме kol) начальные}

s2:=''; {значения.}

inc(kol);

If kol=3 Then

begin

ExitPr:=True; {Если найдено уже три варианта выходим из цикла}

Break;

end;

continue;

end;

If Pr and (Stroka[m]=' ') Then {Проверка кол-ва пробелов между словами}

Continue {на тот случай если вариант духов состоит из}

Else If (not Pr) and (Stroka[m]=' ') Then {нескольких слов. Пробел оставляется}

Begin {только один}

Pr:=True;

s2:=s2+Stroka[m];

end

Else If Stroka[m]<>' ' Then

begin

s2:=s2+Stroka[m];

Pr:=False;

end;

end;

end;

If not ExitPr Then Sravn(s2); {Если третий вариант не заканчивается запятой то отослать его на сравнение.}

end; {Raspoz}

{Основной блок программы в котором выводятся все строки с условиями и вариантами духов. Также ищется самый популярные духи}

var

Sinp, Sout: String;

n, mproiz, mduhi, maxd: Integer;

begin

For x:=1 to 5 do {обнуляется матрица голосов}

For y:=1 to 5 do

golosa[x,y]:=0;

ClrScr;

WriteLn('На конкурсе 5 парфюмерных фирм представили по 5 духов');

WriteLn;

for x:=1 to 5 do

begin

Write('Фирма ',proiz[x],' представила духи: '); {Вывод информации о производителях и их духов}

for y:=1 to 5 do

begin

Write(duhi[x,y],' ');

end;

WriTeLn;

WriteLn;

end;

Write('Сколько людей было опрошено? ');

ReadLn(n);

WriteLn;

WriteLn('Введите названия духов выбранные ',n,' опрошенными людьми.');

WriteLn('Каждый опрошенный может выбрать не более трех духов.');

WriteLn('Если вы введете более трех духов на одного опрошенного то');

WriteLn('будут приняты только первые три варианта.');

WriteLn('Названия духов необходимо вводить через запятую.');

WriteLn;

For i:=1 to n do

begin

Write('Введите выбор ',i,'-го опрошенного: '); {Ввод информации опроса}

ReadLn(Sinp);

mStr(Sinp, Sout);

Raspoz(Sout);

end;

WriteLn;

mproiz:=0;

mduhi:=0;

maxd:=0;

For x:=1 to 5 do

For y:=1 to 5 do

begin

If golosa[x,y] > maxd Then {Нахождение самых популярных духов.}

begin

maxd:=golosa[x,y];

mproiz:=x;

mduhi:=y;

end;

end;

WriteLn('Самые полпулярные духи "',duhi[mproiz,mduhi],

'" производимые фирмой ',proiz[mproiz]);

ReadLn

end.

Вариант работы программы: