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

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

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

> Задачка по записям., Немного помощи
Rom1k
сообщение 8.04.2007 22:37
Сообщение #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 - 8.04.2007 23:02
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 9.04.2007 20:38
Сообщение #2


Гость






Цитата
Хотя мне кажется, что есть и другой способ - менять местами всю запись целиком, но я не знаю как это сделать.
Все просто:

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


Цитата
Но у меня все равно сортировка идет от Я до А
Меняем знак в операции сравнения с "больше" на "меньше", при этом направление сортировки меняется на противоположное...

Сообщение отредактировано: volvo - 9.04.2007 20:43
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 27.07.2025 7:19
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"