Вопрос № 183501: Здравствуйте уважаемые эксперты. Прошу помощь в следующем вопросе: Дан файл с набором структур типа: номер, фамилия, курс, оценка. Не используя дополнительного файла, разместить в исходном файле сведения сначала об отличниках, потом о хорошистах и...
Вопрос № 183501:
Здравствуйте уважаемые эксперты. Прошу помощь в следующем вопросе: Дан файл с набором структур типа: номер, фамилия, курс, оценка. Не используя дополнительного файла, разместить в исходном файле сведения сначала об отличниках, потом о хорошистах и т. д. *** Файл будет создаваться в начале программы.
Будет запрос на заполнение типа "номер" "фамилия" "курс" "оценка"
Полагаю что выглядит это так (данные отделятся будут пробелами): Есть
файл в котором написано
//№ фамилия курс оценка 1 Иванов 2 2 2 Петров 2 3 3 Кукушкина 2 5 4 Сидоров 2 4
А после того как программа отработает то должны получить
3 Кукушкина 2 5 4 Сидоров 2 4 2 Петров 2 3 1 Иванов 2 2
const
MaxN=100;
var
i,j,n: integer;
f: text;
s, tmp: string;
nom, fm, kurs, ocenka: string;
a: array[1..MaxN] of string;
begin
// Создали файл
assign(f,'1.txt');
rewrite(f);
write('n=');
readln(n);
// Заполнили файл, введя n произвольных строк
for i:= 1 to n do
begin
write('номер ');
readln(nom);
write('фамилия ');
readln(fm);
write('курс ');
readln(kurs);
write('оценка ');
readln(ocenka);
writeln(f, nom+' '+fm+' '+kurs+' '+ocenka);
end;
close(f);
// Распечатали содержимое
reset(f);
while not eof(f) do
begin
readln(f,s);
writeln(s);
end;
writeln;
close(f);
// Загрузили данные в массив
n:= 0;
reset(f);
while not eof(f) do
begin
inc(n);
readln(f, a[n]);
end;
// Отсортировали массив
for i:= 1 to n-1 do
for j:= n downto i+1 do
if a[j-1][length(a[j-1])]<a[j][length(a[j])] then
begin
tmp := a[j];
a[j] := a[j-1];
a[j-1] := tmp;
end;
close(f);
// Загрузили данные в файл
rewrite(f);
for i:= 1 to n do
writeln(f, a[i]);
close(f);
// Распечатали содержимое
reset(f);
while not eof(f) do
begin
readln(f,s);
writeln(s);
end;
writeln;
close(f);
// Удалили всю информацию
rewrite(f);
close(f);
// Убедились, что файл пуст
reset(f);
if eof(f) then
writeln('Файл пуст');
close(f);
end.
Вариант с файлом записей
Код :
const
MaxN=100;
type
TStudent = record
nom: integer;
fm: string[30];
kurs: integer;
ocenka: integer;
end;
var
i,j,n: integer;
st, tmp: TStudent;
f: file of TStudent;
a: array[1..MaxN] of TStudent;
begin
// Создали файл
assign(f,'1.datt');
rewrite(f);
write('n=');
readln(n);
// Заполнили файл, введя n произвольных строк
for i:= 1 to n do
begin
write('номер ');
readln(st.nom);
write('фамилия ');
readln(st.fm);
write('курс ');
readln(st.kurs);
write('оценка ');
readln(st.ocenka);
write(f, st);
end;
/// close(f);
// Распечатали содержимое
/// reset(f);
seek(f,0);
while not eof(f) do
begin
read(f,st);
writeln(st.nom, ' ', st.fm, ' ', st.kurs, ' ', st.ocenka);
end;
writeln;
/// close(f);
// Загрузили данные в массив
n:= 0;
/// reset(f);
seek(f,0);
while not eof(f) do
begin
inc(n);
read(f, a[n]);
end;
// Отсортировали массив
for i:= 1 to n-1 do
for j:= n downto i+1 do
if a[j-1].ocenka<a[j].ocenka then
begin
tmp := a[j];
a[j] := a[j-1];
a[j-1] := tmp;
end;
close(f);
// Загрузили данные в файл
rewrite(f);
for i:= 1 to n do
write(f, a[i]);
/// close(f);
// Распечатали содержимое
/// reset(f);
seek(f,0);
while not eof(f) do
begin
read(f,st);
writeln(st.nom, ' ', st.fm, ' ', st.kurs, ' ', st.ocenka);
end;
writeln;
/// close(f);
// Удалили всю информацию
/// rewrite(f);
seek(f,0);
truncate(f);
/// close(f);
// Убедились, что файл пуст
/// reset(f);
seek(f,0);
if eof(f) then
writeln('Файл пуст');
close(f);
end.
Приложение:
Ответ отправил: Гусятинер Леонид Борисович aka lamed (Академик)
Ответ отправлен: 04.06.2011, 14:34
Номер ответа: 267572 Россия, Ковров Тел.: +79107793141
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267572
на номер 1151 (Россия) |
Еще номера »
Отвечает Орловский Дмитрий (Академик) :
Здравствуйте, Посетитель - 376401! Не мог пройти мимо сортировки в массиве. Я бы сделал по-другому:
Приложение:
Ответ отправил: Орловский Дмитрий (Академик)
Ответ отправлен: 04.06.2011, 22:16
Номер ответа: 267576 Россия, Москва Организация: МИФИ
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267576
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.