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

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

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

> Задачка по записям., Немного помощи
сообщение
Сообщение #1


Пионер
**

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

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


Данные о студентах содержат фамилию и набор оценок на экзаменах.Требуется занести данные с клавиатуры в массив записей,упорядочить по фамилиям в алфавитном порядке.


Вот всё,что я смог сделать.мне кажется что в процедуре я что-то не правильно вырезаю.Помогите плиз.Ведь там не так много подправить надо.
program n1;
const
nmax=7;
type
sotr=record
name:string[20];{Фамилия}
matan,progr,ist:byte;{Ocenki}
end;

function readdata(var rec:sotr):integer;
var
s:string[80];{Строка ввода}
p:integer;{Номер позиции в строке}
matanS,progrS,istS:string[1];{Строка, содержащая оценку за матан,progr и историю}
error:integer;{Код ошибки при преобразовании строки в число}
begin
readln(s);
if S='' then
ReadData:=-1
else
begin
p:=pos(' ',s);
if p=0 then
ReadData:=1
else
begin
rec.name:=copy(s,1,p-1);
delete(s,1,p);
matanS:=copy(S,1,pos(' ',s));
val(matanS,rec.matan,error);
delete(s,1,length(matanS));
progrS:=copy(S,1,pos(' ',s));
val(progrS,rec.progr,error);
delete(s,1,length(progrS));
istS:=copy(S,1,pos(' ',s));
val(istS,rec.ist,error);
delete(s,1,length(istS));
if Error <> 0 then
ReadData:=1
else
ReadData:=0;
end;
end;
end;
VAR
data:array[1..nmax] of sotr;{Массив записей о служащих}
N:integer;
readResult:integer;{Результат ввода записи}
I,j:integer;{номер очередного эл-та массива}
t:string[25];
BEGIN

{Ввод числа записей}
repeat
write('Задайте число служащих (1..',nmax,')');
readln(n);
if (n<=0) or (N>nmax) then
writeln('Вы ошиблись! Повторите!');
until (n>0) and (n<=nmax);

{Ввод массива записей}
writeln('Введите фамилии студентов и через пробел их оценки ');
for i:=1 to n do
begin
repeat
ReadResult:=ReadData(data[I]);
if ReadResult <> 0 then
writeln('Вы ошиблись! Повторите!');
until ReadResult=0;
end;

for i:=1 to n-1 do
for j:=i+1 to n do
if data[i].name>data[j].name then
begin
t:=data[i].name;
data[i].name:=data[j].name;
data[j].name:=t;
end;


writeln('Фамилия матан прогр история ');
for i:=1 to n do
writeln(data[i].name,' ',data[i].matan,' ',data[i].progr,' ',data[i].ist);
end.




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


Профи
****

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

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



Может)))
Замени
rec.name:=copy(s,1,p-1);
delete(s,1,p);
matanS:=copy(S,1,pos(' ',s));
val(matanS,rec.matan,error);
delete(s,1,length(matanS));
progrS:=copy(S,1,pos(' ',s));
val(progrS,rec.progr,error);
delete(s,1,length(progrS));
istS:=copy(S,1,pos(' ',s));
val(istS,rec.ist,error);
delete(s,1,length(istS));
на
rec.name:=copy(s,1,p-1);
delete(s,1,p);
matanS:=copy(S,1,1);
val(matanS,rec.matan,error);
delete(s,1,2);
progrS:=copy(S,1,1);
val(progrS,rec.progr,error);
delete(s,1,2);
istS:=copy(S,1,1);
val(istS,rec.ist,error);
delete(s,1,length(istS));

Но это работает правильно, только если пользователь вводит между оценками по одному пробелу... Хотя сообщение об ошибке выдается.

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

Сообщений в этой теме
Rom1k   Задачка по записям.   9.04.2007 2:37
Rom1k   никто ничем не может помочь?   9.04.2007 3:03
Айра   Может))) Замени rec.name:=copy(s,1,p-1); delete(…   9.04.2007 3:24
КМА   for i:=1 to n-1 do for j:=i+1 to n do if da…   9.04.2007 3:25
Rom1k   КМА неправильно ты мне сортировку написал.Он так н…   9.04.2007 3:47
Айра   Странно, у меня и при твоей сортировке и при вари…   9.04.2007 4:01
Rom1k   что-то я вообще ничего не пойму.Может кто нить пом…   9.04.2007 4:08
Айра   Замени свою сортировку на for i:=1 to n-1 do for…   9.04.2007 4:25
Rom1k   потом прост выводить ответ по downto наверное.спас…   10.04.2007 0:29
volvo   Все просто: var t: sotr; ... for i:=1 to n-1 do …   10.04.2007 0:38
Rom1k   глупый вопрос.а как называется этот метод сортиров…   10.04.2007 0:43
КМА   Этот метод назвается "Пузырек". И у меня…   10.04.2007 0:59
Айра   Спасибо volvo, я пыталась так делать, но у меня бы…   10.04.2007 1:14
volvo   Ну, так это же тип, описанный автором программы :)…   10.04.2007 1:25
Tan   t это перменная тип которой запись, описанная выше…   10.04.2007 1:25
Rom1k   Блин ребята.я вам мега благодарен! ! …   10.04.2007 1:46


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

 





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