Вопрос № 183077: Здравствуйте! У меня возникли сложности с таким вопросом: Сапожников, Токарев, Музыкантов, Кузнецов Их фамилии не соответствуют профессиям. Фамилия сапожника не соответствует профессии Музыкантова Фамилия токаря не Кузнецов и она не соотв...
Вопрос № 183077:
Здравствуйте! У меня возникли сложности с таким вопросом: Сапожников, Токарев, Музыкантов, Кузнецов Их фамилии не соответствуют профессиям. Фамилия сапожника не соответствует профессии Музыкантова Фамилия токаря не Кузнецов и она не соответствует профессии Токарев у кого какая профессия. Заранее спасибо)
Отвечает Сергей Бендер (Практикант) :
Здравствуйте, JohnyWayne!
Вот что получилось. По моему довольно громоздко и уродливо -- мне дико не нравится. Но работает правильно. (Кстати, два решения)
Код:
const famlist:array[1..4] of string=('Сапожников',
'Токарев', 'Музыкантов', 'Кузнецов');
proflist:array[1..4] of string=('сапожник', 'токарь', 'музыкант', 'кузнец');
var fams:array[1..4] of inte
ger; {Распределение фамилия по профессииям} fam_busy:array[1..4] of boolean; {Занята ли фамилия} i:1..4;
begin {Очищаем массивы} for i:=1 to 4 do begin fams[i]:=0; fam_busy[i]:=false; end;
{Перебираем фамилии сапожника, начиная с Токарев (Сапожников пропускаем)} fams[1]:=2; while fams[1]<= 4 do begin {Помечаем выбранную фамилию, как занятую} fam_busy[fams[1]]:=true;
{Перебираем фамилии токаря} fams[2]:=1; while fams[2]<=4 do begin {Если выбранная фамилия не занята и не совпадает с профессией и не Кузнецов} if not fam_busy[fams[2]] and (fams[2]<>2) and (fams[2]<>4) then begin {Помечаем выбранную фамилию, как занятую} fam_busy[fams[2]]:=true; {Пе
ребираем фамилии музыканта} fams[3]:=1; while fams[3]<= 4 do begin {Если выбранная фамилия не занята и не совпадает с профессией} if not fam_busy[fams[3]] and (fams[3]<>3) then begin {Помечаем выбранную фамилию, как занятую} fam_busy[fams[3]]:=true; {Перебираем фамилии кузнеца}
fams[4]:=1; while fams[4]<=3 do begin {Если выбранная фамилия не занята} if not fam_busy[fams[4]] {фамилия сапожника не соответствует профессии Музыкантова} and (fams[fams[1]]<>3) {фамилия токаря не соответствует
профессии Токарева} and (fams[fams[2]]<>2) then begin {Выводим соответствия профессий и фамилий} for i:=1 to 4 do writeln(proflist[i],' - ',famlist[fams[i]]); writeln('---'); end; {Следующая фамилия} fams[4]:=fams[4]+1;
end; {Освобождаем рассмотренную фамилию} fam_busy[fams[3]]:=false; end; {Следующая фамилия} fams[3]:=fams[3]+1 end; {Освобождаем рассмотренную фамилию} fam_busy[fams[2]]:=false; end; {Следующая фамилия} fams[2]:=fams[2]+1; end;
{Освобождаем рассмотренную фамилию} fam_busy[fams[1]]:=false; {Следующая фамилия} fams[1]:=f
ams[1]+1; end; readln; end.
Ответ отправил: Сергей Бендер (Практикант)
Ответ отправлен: 09.05.2011, 21:37
Номер ответа: 267060 Тел.: 8-912-761-0437 Организация: Удмуртский ГосУнивеситет. г. Ижевск. Абонент Skype: ostapbskype
Оценка ответа: 5
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267060
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.