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

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

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

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


Гость






Люди, пожалуйста, помогите решить задачу! Угроза недопуска к экзаменам sad.gif


Организовать типизированный файл, в котором находятся данные об участниках соревнований по многоборью: фамилия, имя, страна, массив результатов. Найти победителя – участника, набравшего наибольшее количество баллов. Напишите встроенную подпрограмму-процедуру для организации безопасного ввода фамилии и имени участника, а также страны.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Поиск по ключевому слову "типизированный"...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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


Гость






Попыталась решить - вот что получилось:
Код
type
base=record
fam, name, strana:string;
rez:real;
end;
var
igrok:array[1..10] of base;
i,p:integer;
begin
writeln('‚ўҐ¤ЁвҐ ¤ ­­лҐ ®Ў гз бв­ЁЄ е б®аҐў­®ў ­Ё©');
for i:=1 to 10 do
with igrok[i] do begin
writeln ('‚ўҐ¤ЁвҐ д ¬Ё«Ёо гз бв­ЁЄ ');
readln(fam);
Writeln ('‚ўҐ¤ЁвҐ Ё¬п гз бв­ЁЄ ');
readln(name);
Writeln('‚ўҐ¤ЁвҐ бва ­г. Є®в®аго ЇаҐ¤бв ў«пҐв гз бв­ЁЄ');
readln (strana);
writeln('‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® Ў ««®ў, ­ Ўа ­­ле гз бв­ЁЄ®¬');
readln(rez);
end;
writeln('€Ја®Є. ­ Ўа ўиЁ© ­ ЁЎ®«м襥 Є®«ЁзҐбвў® Ў ««®ў:');
for i:=1 to 10 do
with igrok[i] do begin
rez:=p;
for i:=1 to 10 do
with igrok[i] do begin
if rez>p then
rez:=p;
end;
writeln (fam,' ',name, ' -  ',strana);
end;
readln
end.


Но что-то в концовке не получается, плюс несмогла придумать подпрограмму-процедуру. Если кому нетрудно - пожалуйста, помогите.
Заранее благодарна.
Анюта.

Сообщение отредактировано: GoodWind -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Анна

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


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


Гость






Цитата
для организации безопасного ввода
Вот это можно пояснить? Что значит "безопасного"? Какие опасности могут тебя подстерегать при вводе строки? Понятно, что при вводе чисел подводных камней может быть много... Но строка ?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Анна

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


я узнала: нужно написать такую подпрограмму-процедуру, которая бы проверяла написаны ли фамилия, имя и страна русскими буквами. Если присутствуют какие-либо символы и не русские буквы, то выводить ошибку.
И еще я не разобралась: как найти участника, набравшего максимальное количество баллов?

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


Гость






Procedure GetInput(Var s: string);
Var i: Integer;
Begin
Repeat
Write('s = '); ReadLn(s);
i := 1;
While
(i <= Length(s)) and
(s[i] in ['а'..'п', 'р'..'я', 'А'..'П', 'Р'..'Я']) Do Inc(i);
If i <= Length(s) Then WriteLn('Error...');
Until i > Length(s);
End;

Эта процедура будет запрашивать ввод строки заново до тех пор, пока в строке не введены ТОЛЬКО русские символы.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Анна

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


Большое спасибо! А как найти участика, набравшего больше всех баллов?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Анна

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


Блин! Я соовсем запуталась! Ничего не получаетсяsad.gif
Volvo, пожалуйста, скинь мне решение этой задачи целиком... Очень тебя прошу... В четверг сдавать (крайний срок)...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Знаток
****

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

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


Точно также, как ищут максимальное число в обычном массиве, сравнивается конкретное поле rez.


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Анна

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


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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Заводишь real переменную, скажем MaxRez.
Кладешь туда 0 (ноль)
Читаешь файл, проходишься по всем записям, читаешь число rez.
Сравниваешь его с MaxRez.
Если оно меньше, чем MaxRez - ничего не делаешь, переходишь к следующей записи
Если оно больше либо равно MaxRez - присваиваешь его значения переменной MaxRez
В конце цикла максимальный результат лежит в MaxRec


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






lapp, ну и что это тебе даст? Задание в чем заключается, ты внимательно прочел? Перечитай:
Цитата
А как найти участика, набравшего больше всех баллов?
Понимаешь, НЕ число баллов, а участника... Так что кроме maxRez надо еще и Record сохранять...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Извини, спутал.
Интересно, что ведь сначала написал все, чтоб искать именно участника (в качестве доказательства - наличие слов "либо равно"), а потом вдруг решил, что это не надо (стукнуло в голову!) и убрал лишние строки.. sad.gif
Вот исправленный вариант.

Заводишь переменную типа base, скажем Winner
Заводишь real переменную, скажем MaxRez.
Кладешь туда 0 (ноль)
Читаешь файл, проходишься по всем записям, читаешь число rez.
Сравниваешь его с MaxRez.
Если оно меньше, чем MaxRez - ничего не делаешь, переходишь к следующей записи
Если оно больше либо равно MaxRez - присваиваешь его значения переменной MaxRez, а значение всего рекорда присваиваешь переменной Winner.
В конце цикла максимальный результат лежит в MaxRec, а победитель - в Winner.

Но тут есть одно но: результаты нескольких участников могут быть равны, тогда победитель не один (именно поэтому я проверяю равенство с большестью, а не с меньшестью, что было бы рациональнее, если ищется только максимальный результат). Выход отсюда не совсем тривиален. Нужно либо завести еще один массив типа base, но непонятки возникают с его размерностью. Можно положить ее такой же, как у исходного массива, но если волнует проблема минимизации памяти, то лучше сделать список.
Правда, в задании не сказано, что делать с найденными победителями. Если просто печатать их данные, то можно избежать многих проблем smile.gif.

И еще раз извиняюсь за отъезд крыши в неподходящий момент..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Анна

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


Задачу сегодня не сдала sad.gif Объявили строгий выговор и дали время до вторника...
Ребят, может поможете бедной девушке сдать, наконец, эту задачу? Нужен полный текст программы. Ну пожалуйста-а-а....


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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Ок, Анютка сделаем. Сейчас настучу че-нть.
Только скажи- что у тебя за кодировка такая была? Я пробовал подобрать, но максимум, чего добился - это по нескольку русских букв от каждого слова.. Это что, украинский или еще что-то? Я все это заменю на нормальную виндусовую кодировку, если нужно другую - сама меняй. Ок?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Ну вот, кажется готово..
Я попытался максимально сохранить твою прогу, но кое-что все же пришлось изменить.
Например, вместо фиксированной размерности 10 я ввел константу M, в файле она равна 10. Просто в отладке вводить все десять записей было в лом..
Далее, твое поле name я заменил на поле imq (имя).
Но главное - рекордсменов (т.е. тех, кто набрал максимальный балл) может быть несколько. Поэтому программа усложнилась. Я снабдил ее подробными коментариями, так что думаю, ты разберешься.
Если есть вопросы - задавай.

uses CRT;
const
M=10;
type
base=record
fam, imq, strana:string;
rez:real;
end;
var
igrok:array[1..M] of base;
i,p:integer;
MaxRez:real;
w:array[1..M] of integer;

begin
writeln('ввдите данные об участниках соревнований');
for i:=1 to M do with igrok[i] do begin
writeln ('введите фамилию участника:');
readln(fam);
Writeln ('введите имя участника:');
readln(imq);
Writeln('введите страну. которую представляет участник:');
readln (strana);
writeln('введите количество баллов, набранных участником:');
readln(rez);
WriteLn('-----------------------');
end;
MaxRez:=0; {Подготавливаем переменную для максимального результата}
{Поиск максимального результата}
for i:=1 to M do with igrok[i] do if rez>MaxRez then begin {Найден новый рекорд}
p:=1; {Рекорд пока один}
w[1]:=i; {Запоминаем номер рекордсмена}
MaxRez:=rez; {Запоминаем рекорд}
end
else if rez=MaxRez then begin {Найден результат, равный рекорду}
Inc(p); {Увеличиваем количество рекордсменов}
w[p]:=i; {Запоминаем номер нового рекордсмена}
end;
{Вывод окончательных данных}
WriteLn('Максимальный результат: ',MaxRez);
WriteLn('Всего игроков набрало максимальный результат: ',p);
for i:=1 to p do with igrok[w[i]] do writeln (fam,' ',imq, ' - ',strana); {Цикл по номерам рекордсменов}
readln
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Женский
Реальное имя: Анна

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


Огромное тебе спасибо!!! smile.gif
Встроенную подпрограмму-процедуру попробую написать сама.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Гость






lapp, а ты в курсе, что вот эту конструкцию:
  else if rez=MaxRez then begin
...
end;

любой здравомыслящий преподаватель зарубит на корню? Я, например, такое бы не пропустил... Ну нельзя так сравнивать вещественные числа..

Анютка, так что будь готова к дополнительным вопросам в эту сторону...
 К началу страницы 
+ Ответить 

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

 





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