Вывод множества из файла на экран - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д