IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Задача на работу с текстовым файлом
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Добрый день. Очень прошу помочь с такой задачей: "Составить программу решения задачи. Каждый из N (N задано) опрошенных членов жюри спортивного состязания назвал 5 фамилий возможных претендентов на первое место. Определить фамилию спортсмена, который является, по мнению жюри, наиболее вероятным победителем. Получить список фамилий, если несколько спортсменов получат равное количество голосов. Предусмотреть, что опрашиваемый должен назвать 5 разных фамилий."
Сдать должен работу 17-го января.
Вот то, что есть на сегодняшний день:
program laba;
uses crt;
var
ftxt:text;
i,j,cod:integer;
st:string;
st1,st2,st3,st4,st5,st6:string;
n:integer;
found:boolean;

begin
clrscr;
assign(ftxt,'Sports.txt');
{SI-} reset(ftxt); {SI+}
if IOResult<>0 then
begin
writeln('­Ґв д ©« ');
halt
end;

close(ftxt);
reset(ftxt);

while not eof(ftxt) do
begin
readln(ftxt,st);
st1:=copy(st,1,2); {номер жюри}
st2:=copy(st,4,8);
st3:=copy(st,13,8);
st4:=copy(st,22,8);
st5:=copy(st,31,8);
st6:=copy(st,40,8);
writeln(st1,' ',st2,' ',st3,' ',st4,' ',st5,' ',st6);
end;
close(ftxt);
end.

И сам текстовый файл...

Сообщение отредактировано: Доцент -


Прикрепленные файлы
Прикрепленный файл  Sports.txt ( 470 байт ) Кол-во скачиваний: 285
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 396
Пол: Мужской

Репутация: -  9  +


Ну а в чём проблема?
Подсчитать количество появления каждой фамилии в файле,
Если опрашиваемый должен назвать пять разных фамилий то во первых не пускать дальше, пока не будет введена хоть одна буква и проверять вводил ли он такую фамилию.


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


В том и дело что я не знаю как это реализовать. Программу, что я выложил выше, писал не я. Помоги пожалуйста.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

Группа: Пользователи
Сообщений: 396
Пол: Мужской

Репутация: -  9  +


pascal?-год не залазил. Попробую.


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 396
Пол: Мужской

Репутация: -  9  +


Вроде работает.
(без динамических массивов и автозавершения пальци как деревянные wacko.gif )

program zhuri;
uses crt;
const im=10;

type trec=record count:byte;ima:string[9]end;
var
ftxt:text;
mas:array[0..im]of trec;
sta:array[1..6]of string[9];

i,z,max:integer;
st:string;

begin
clrscr;
assign(ftxt,'c:\code-pas\Sports.txt');
reset(ftxt);
while not eof(ftxt) do
begin
readln(ftxt,st);
sta[1]:=copy(st,1,2);
sta[2]:=copy(st,4,8);
sta[3]:=copy(st,13,8);
sta[4]:=copy(st,22,8);
sta[5]:=copy(st,31,8);
sta[6]:=copy(st,40,8);
writeln(sta[1],' ',sta[2],' ',sta[3],' ',sta[4],' ',sta[5],' ',sta[6]);

for i:=2 to 6 do
for z:=0 to im do
if mas[z].ima<>'' then
begin
if mas[z].ima=sta[i] then
begin
mas[z].count:=mas[z].count+1;
break;
end;
end
else
begin
mas[z].ima:=sta[i];
mas[z].count:=mas[z].count+1;
break;
end;
end;
close(ftxt);
writeln;
{--------------------------------}
max:=mas[0].count;
for z:=0 to im do
if mas[z].count>max then max:=mas[z].count;
{--------------------------------}
for z:=0 to im do
begin
if mas[z].count=max then textcolor(12)
else textcolor(7);
write(z:2);write(' ');
write(mas[z].ima);
writeln(mas[z].count:2);

end;
readln;
end.






--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Спасибо огромное. Вроде работает. Только не понятно, а как сделать тест, чтобы было два или три победителя...хорошо бы чтобы программа спрашивала сколько человек в жюри.
Но всеравно спасибо!!! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Знаток
****

Группа: Пользователи
Сообщений: 396
Пол: Мужской

Репутация: -  9  +


Цитата(Доцент @ 16.01.2008 1:26) *

Только не понятно, а как сделать тест, чтобы было два или три победителя...хорошо бы чтобы программа спрашивала сколько человек в жюри.


Два или три победителя? если в смысле того, что победители получат равное кол-во голосов, то оно уже работает, а если 1,2,3 места, то нужно находить не только максимальное кол-во, но и пред максимальное.

Для того что-бы прога спрашивала сколько человек в жури нужны были динамические массивы. можно...
Подожди, так она и спрашивает. Если в файле будет две строки, значит и жури два, если 15 то...
только количество имён не должно быть больше, чем задумано в программе.


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Ты не правильно меня понял. Я имел в виду чтобы сама прога спрашивала сколько жюри брать. Текстовый файл желательно больше не трогать. smile.gif

Еще хорошо бы сделать, чтобы ответ был не подсвечен красным цветом, а просто только имя победителя выдавалось.

Сообщение отредактировано: Доцент -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Знаток
****

Группа: Пользователи
Сообщений: 396
Пол: Мужской

Репутация: -  9  +


Ну тогда так.
А условие отчёта сам правь.


Прикрепленные файлы
Прикрепленный файл  ZHURI.PAS ( 1.65 килобайт ) Кол-во скачиваний: 257


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Спасибо огромное!!! good.gif 4.gif

Напиши пожалуйста, если не сложно, что означают эти переменные и операции в проге:
im, count, ima, sta, z, break

Сообщение отредактировано: Доцент -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


The matrix has me!!!
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


trec=record count:byte;ima:string[9]end;
count и ima - поля данных записи Trec,
break означает - выход из цикла!!! Дальше не смотрел!
А вообще тебе не помешало бы хоть что-нить по паскалю почитать,
хотя бы про записи (типы данных) и основные операторы, а то завалиться можешь...


Добавлено через 3 мин.
sta:array[1..6]of string[9]; - вот тебе, что такое sta
im - константа, заданы в разделе констант, а z - обычный счётчик для фора!!! smile.gif


--------------------
"Брать производную можно научить даже обезьяну" - мой препод по матану! :-)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Знаток
****

Группа: Пользователи
Сообщений: 396
Пол: Мужской

Репутация: -  9  +


Цитата(Yevgeny @ 16.01.2008 22:13) *

trec=record count:byte;ima:string[9]end;
count и ima - поля данных записи Trec,
break означает - выход из цикла!!! Дальше не смотрел!
А вообще тебе не помешало бы хоть что-нить по паскалю почитать,
хотя бы про записи (типы данных) и основные операторы, а то завалиться можешь...
Добавлено через 3 мин.
sta:array[1..6]of string[9]; - вот тебе, что такое sta
im - константа, заданы в разделе констант, а z - обычный счётчик для фора!!! smile.gif


А тут тебе что не нравится? сдесь все работает и вполне нормально.
тут break при месте и выводит из внутреннего цикла, КУДА ТЫ СМОТРЕЛ
Для одарённых sta это массив строк.
а чего придираться к z


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Решил я остановиться на такой проге. Только препод сказал чтобы я добавил ситуацию выбора количества жюри и чтобы при двух победителях, выдавались фамилии обоих, а не одного как сейчас. Добавьте пожалуйста кто-нибудь это. Зараннее спасибо.
program zhuri;
{Раков А. В. 5ВТИ-042}
uses crt;
const m=10;
type
sport=record count:byte;
ma:string[9]
end;
var
f:text;
mas:array[0..m]of sport;
sta:array[1..6]of string[9];
i,k,max:integer;
st:string;
maxfam:string;
begin
clrscr;
writeln(‘Программа для нахождения фамилии победителя спортивного соревнования’);
assign(f,'Sports.txt');
reset(f);
while not eof(f) do
begin
readln(f,st);
sta[1]:=copy(st,1,2);
sta[2]:=copy(st,4,8);
sta[3]:=copy(st,13,8);
sta[4]:=copy(st,22,8);
sta[5]:=copy(st,31,8);
sta[6]:=copy(st,40,8);
writeln(sta[1],' ',sta[2],' ',sta[3],' ',sta[4],' ',sta[5],' ',sta[6]);
for i:=2 to 6 do
for k:=0 to m do
if mas[k].ma<>'' then
begin
if mas[k].ma=sta[i] then
begin
mas[k].count:=mas[k].count+1;
break;
end;
end
else
begin
mas[k].ma:=sta[i];
mas[k].count:=mas[k].count+1;
break;
end;
end;
close(f);
writeln;
max:=mas[0].count;
for k:=0 to m do
if mas[k].count>max then
begin
max:=mas[k].count;
maxfam:=mas[k].ma;
end;
write(maxfam);
readln;
end.



Сообщение отредактировано: Доцент -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Цитата
Добавьте пожалуйста кто-нибудь это.

А сам что-нибудь делать собираешься?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Цитата(Michael_Rybak @ 18.01.2008 16:30) *

А сам что-нибудь делать собираешься?

Сравни текст проги что я выложил, и что мне написали...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Я и сам делаю что могу...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Цитата
Я и сам делаю что могу...


Откуда мне об этом знать? Ты пишешь - "добавили новое задание, сделайте кто нибудь пожалуйста". И ничего не пишешь по поводу того, что сделал на этот счет сам, и что не получается.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


ну мне не задание добавили. Просто сказали что я это пропустил. Я сижу и не знаю откуда начинать ввод количества жюри. Ставлю перед циклом, не считает, ставлю после, повторяется. В цикле я так понял надо на количество жюри(я сделал n) менять m. Так? Я просто пока тяжело понимаю эту тему с внешними файлами.


Так, ввод количества жюри я сделал smile.gif я в шоке))) Но вот чтобы ответ выдавал множественный (если два победителя то две фамилии) врядли сделаю. но попытаюсь smile.gif))

Добавлено через 5 мин.
Вот что теперь на данный момент у меня
program zhuri;
{Раков А. В. 5ВТИ-042}
uses crt;
const m=10;
type
sport=record count:byte;
ma:string[9]
end;
var
f:text;
mas:array[0..m]of sport;
sta:array[1..6]of string[9];
i,k,max,n:integer;
st:string;
maxfam:string;
begin
clrscr;
writeln('Программа для поиска победителя спортивного соревнования ');
writeln('Введите количество жюри');
readln(n);
assign(f,'Sports.txt');
reset(f);
while not eof(f) do
begin
readln(f,st);
sta[1]:=copy(st,1,2);
sta[2]:=copy(st,4,8);
sta[3]:=copy(st,13,8);
sta[4]:=copy(st,22,8);
sta[5]:=copy(st,31,8);
sta[6]:=copy(st,40,8);
writeln(sta[1],' ',sta[2],' ',sta[3],' ',sta[4],' ',sta[5],' ',sta[6]);
for i:=2 to 6 do
for k:=0 to n do
if mas[k].ma<>'' then
begin
if mas[k].ma=sta[i] then
begin
mas[k].count:=mas[k].count+1;
break;
end;
end
else
begin
mas[k].ma:=sta[i];
mas[k].count:=mas[k].count+1;
break;
end;
end;
close(f);
writeln;
max:=mas[0].count;
for k:=0 to m do
if mas[k].count>max then
begin
max:=mas[k].count;
maxfam:=mas[k].ma;
end;
write(maxfam);
readln;
end.



Сообщение отредактировано: Доцент -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской

Репутация: -  0  +


Не получается. Поможет кто-нибудь?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


В конце вместо вывода maxfam сделай еще один цикл, и выводи каждого, у кого голосов ровно max.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 19:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name