Вывод множества из файла на экран - Pascal ABC
Формулировка задачи:
В студенческой группе 30 человек. 15 из них знают английский, 10 знают немецкий, 7 знают французский. 30 фамилий записаны в текстовом файле. Программа должна сама выбрать 15 фамилий владеющих английским, 10 немецким, 7 французским и вывести фамилии на экран. Выбор происходит рандомом.
Проблема: Не понимаю как сделать так, чтобы прога сама выбирала 15, 10 и 7 фамилий соответственно.
Помогите, второй день мучаюсь, стыдно даже как то!
Решение задачи: «Вывод множества из файла на экран»
textual
Листинг программы
var a:array[1..30] of byte; f:text; b,n1,n2,n3,i:byte; s1,s2,s3:array[1..15] of string; st:string; m,m1,m2,m3:set of byte; begin randomize; m:=[]; //пустое общее множество m1:=[]; //пустое множество номеров англичан for i:=1 to 15 do //генерируем 15 номеров begin repeat b:=1+random(30); //от 1 до 30 until not(b in m);//пока не выпдет такое которого пока нет в множестве m:=m+[b]; //добавим его в обшее m1:=m1+[b];//и в первое end; m2:=[]; //точно так же с несмцами for i:=1 to 10 do begin repeat b:=1+random(30); until not(b in m); m:=m+[b]; m2:=m2+[b]; end; m3:=[]; //французы for i:=1 to 5 do //выбираем 5 оставщихся номеров, сейчас осенило что можно было просто begin //m3:=[1..30]-m1-m2; хочешь переделай, а я спать repeat b:=1+random(30); until not(b in m); m:=m+[b]; m3:=m3+[b]; end; for i:=1 to 2 do //еще 2 таких которых нет в множестве 3 begin repeat b:=1+random(30); until not(b in m3); m3:=m3+[b]; end; {writeln('Множество 3 '); //Это убери, я для проверки делал for i:=1 to 30 do if i in m3 then write(i,' '); writeln; } assign(f,'fam.txt'); //начинаем работ с файлом reset(f); n1:=0; //мощности масивов-множеств n2:=0; n3:=0; i:=0; //номера while not eof(f) do begin readln(f,st); //читаем фамилию i:=i+1; //определяем номер if i in m1 then //если он в иножестве begin n1:=n1+1; //к англичанам s1[n1]:=st; end else if i in m2 then //если во 2 begin n2:=n2+1; s2[n2]:=st; //к немцам end; //если в 3 или в 3 и 1 или в 3 и 2 if (i in m3)or((i in m3)and(i in m1))or((i in m3)and(i in m2)) then begin n3:=n3+1; s3[n3]:=st;//к французам end; end; close(f); writeln('Знают английский'); for i:=1 to n1 do write(s1[i],' '); writeln; writeln('Знают немецкий'); for i:=1 to n2 do write(s2[i],' '); writeln; writeln('Знают французский'); for i:=1 to n3 do write(s3[i],' '); end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д