![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
AlexSt |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Пусть в файле фамилий ffam находятся фамилии студентов(одна запись - одна фамилия), в файле оценок fnote - в том же порядке оценки студентов( одна запись - массив оценок одного студента), в файле fchg - изменения к файлу оценок(структура записи:номер студента, совпадающий с номером фамилии в файле ffam, номер изменённой оценки, новая оценка). Записи упорядочены по номеру студента. Распечатайте список фамилий студентов, сдавших сессию на 4 и 5. Файлы ffam, fnote, fchg читаются один раз.
P. S. если Вам лень решать опишите хотя бы согласованное чтение файлов. |
samec |
![]()
Сообщение
#2
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Пол: Мужской Реальное имя: Юра Репутация: ![]() ![]() ![]() |
P. S. если Вам лень решать опишите хотя бы согласованное чтение файлов. Открываешь файл со студентами, читаешь из него всё в массив записей, закрываешь файл. Открываешь файл с оценками, читаешь из него всё в массив оценок, закрываешь файл. Открываешь файл с изменениями, читаешь из него в массив изменившихся оценок (например, таким образом: arr[1,i]:=номер студента, arr[2,i]=новая оценка) все что в нём есть. А потом работаешь с полученными массивами. Сообщение отредактировано: samec - 17.05.2007 6:28 |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Уточнение к ответу samec'а: третий файл читать в массив не надо, исправления в массиве оценок можно делать в процессе чтения файла.
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
AlexSt |
![]() ![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Всё таки не очень понятно как производить чтение из второго и третьего файла, пожалуйста опишите этот момент!
|
AlexSt |
![]() ![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Пусть в файле фамилий ffam находятся фамилии студентов(одна запись - одна фамилия), в файле оценок fnote - в том же порядке оценки студентов( одна запись - массив оценок одного студента), в файле fchg - изменения к файлу оценок(структура записи:номер студента, совпадающий с номером фамилии в файле ffam, номер изменённой оценки, новая оценка). Записи упорядочены по номеру студента. Распечатайте список фамилий студентов, сдавших сессию на 4 и 5. Файлы ffam, fnote, fchg читаются один раз.
program file_stipendiya_n23;
type fam=record
f:string[20]
end;
note=record
a:array[1..10] of byte
end;
chg=record
ns,no,new:byte
end;
var ffam:file of fam;
fnote:file of note;
fchg:file of chg;
p,f:string[20];
i,j:integer;
k,ns,no,new:byte;
fam1:fam;
note1:note;
chg1:chg;
a:array[1..10] of byte;
begin writeln('введтите путь к файлу, содержащему фамилии студентов');
readln(p);
assign(ffam,p);
writeln('введтите путь к файлу, содержащему оценки студентов');
readln(p);
assign(fnote,p);
writeln('введтите путь к файлу, содержащему изменения к файлу оценок');
readln(p);
assign(fchg,p);
reset(ffam); reset(fnote); reset(fchg);
i:=0;
while not eof(ffam) do
begin i:=i+1;
readln(f[i]);
while not eof(fnote) do
begin read(fnote,note1);
for i:=1 to 10 do{тут надо организовать цикл, но я не знаю сколько оценок, 10 – число с потолка}
readln(k)
if a[i]<4 then
begin b:=false
while not eof(fchg) do
begin readln(k);
end;
![]() ![]() |
мисс_граффити |
![]()
Сообщение
#6
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
файл fchg отсортирован по номерам студентов?
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
AlexSt |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Цитата структура записи:номер студента, совпадающий с номером фамилии в файле ffam, номер изменённой оценки, новая оценка вообщем там номера фамилий студентов которые что-то пересдавали. я думаю в том же порядке, только не все |
мисс_граффити |
![]()
Сообщение
#8
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Тогда так: считали запись из файла изменений.
Посмотрели на номер студента. Пока не дойдем до него, спокойно анализируем содержимое двух файлов: читаем фамилию и оценки. Дошли до него - проанализировали с учетом изменений. Считали из файла изменений следующего... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
AlexSt |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
а как прочесть что-то из файла записей номер студента, номер оценки из fchg и оценки из массива в fnote? в fnote я не знаю сколько оценок
![]() ![]() ![]() ![]() ![]() |
Гость |
![]()
Сообщение
#10
|
Гость ![]() |
а как прочесть что-то из файла записей номер студента, номер оценки из fchg и оценки из массива в fnote? в fnote я не знаю сколько оценок
|
Ozzя |
![]()
Сообщение
#11
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата в fnote я не знаю сколько оценок А надо? While not eof(твой_файл) do
|
Lapp |
![]()
Сообщение
#12
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Я так понял, что ты работаешь с типизированными файлами. А для них нужно точно знать формат записи. Ты описал общую структуру записи, но не сказал, какой тип имеют поля в ней. Смею предположить, что все числа описаны как целые.
Для работы со вторым файлом тебе нужен массив оценок - точнее, его тип. Делаешь в проге тип и файл этого типа, а потом читаешь. Допустим, всего оценок 10. Тогда можно делать примерно так: const
NMarks=10;
type
tMarks=array[1..NMarks]of integer;
var
Marks:tMarks;
Fm:file of tMarks;
.....
Assign(Fm,'marksfilename');
ReSet(Fm);
while not EoF(Fm) do begin
Read(Fm,Marks);
......
end;
Разберем работу с третьим файлом.. В своей программе делаешь тип для такой записи (номер студента, номер оценки, сама оценка) и описываешь файл таких записей. Потом читаешь из этого файла.. type
tCorrection=record
Student,Mark,Value:integer
end;
var
Coorrection:tCorrection;
Fc:file of tCorrection;
.....
Assign(Fc,'filename');
ReSet(Fc);
while not EoF(Fc) do begin
Read(F,Correction);
with Correction do begin
......
end
end
Эти два фрагмента демонстрируют общие приципы работы с такими файлами по отдельности. Тебе нужно будет вести чтение из всех трех файлов параллельно: читаешь фамилию, потом читаешь оценки, потом возможно читаешь исправления (возможно, несколько раз) и результат после обработки выводишь на печать - а потом читаешь следующую фамилию.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
![]()
Сообщение
#13
|
|||
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
|||
AlexSt |
![]() ![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
![]() ![]() ![]() ![]() ![]() program file_stipendiya_n23;
uses crt;
type fam=record
f:string[20]
end;
note=record
a:array[1..10] of byte
end;
chg=record
ns,no,new:byte
end;
var ffam:file of fam;
fnote:file of note;
fchg:file of chg;
p,f:string[20];
i,j,exam,kolstud:integer;
mark:byte;
b:boolean;
fam1:fam;
note1:note;
chg1:chg;
a:array[1..10] of byte;
begin clrscr;
writeln('введтите путь к файлу, содержащему фамилии студентов');
readln(p);
assign(ffam,p);
rewrite(ffam);
writeln('введите фамилии студентов, окончание ввода - "0"');
kolstud:=0;
repeat readln(f);
if f<>'0' then begin write(ffam,fam(f));
kolstud:=kolstud+1
end;
until f='0'; close(ffam);
reset(ffam);
writeln('введтите путь к файлу, содержащему оценки студентов');
readln(p);
assign(fnote,p);
writeln('введите количество экзаменов');
readln(exam);
writeln('введите оценки каждого студента');
rewrite(fnote);
for i:=1 to kolstud do
begin writeln('оценки студента № ',i,':');
for j:=1 to exam do
readln(a[j]);
write(fnote,note(a));
end; close(fnote);
reset(fnote);
writeln('введтите путь к файлу, содержащему изменения к файлу оценок');
readln(p);
assign(fchg,p);
rewrite(fchg);
with chg1 do
repeat writeln('введите номер студента, номер изменённой оценки и новую оценку, окончание ввода - "0"');
readln(ns);
readln(no);
readln(new);
if (ns<>0)and(no<>0)and(new<>0) then write(fchg,chg1);
until (ns=0)and(no=0)and(new=0); close(fchg);
reset(fchg);
b:=true; j:=0;
writeln('студенты, получающие стипендию:');
while not eof(ffam) do {считывание данных}
begin j:=j+1;
read(ffam,fam(f));
read(fnote,note(a));
for i:=1 to exam do
if a[i]<4 then with chg1 do
begin b:=false;
while eof(fchg) do
begin read(fchg,chg1);
if (ns=j)and(no=i)and(new>3) then b:=true
end;
close(fchg);
reset(fchg);
end;
if b=true then writeln(f);
end;
end.
|
AlexSt |
![]() ![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Ну задачка в прынцыпе решена осталось найти ошибочку!
![]() (см. выше!) [u] |
AlexSt |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Ну гляньте решение! В чём ошибка?
![]() |
мисс_граффити |
![]()
Сообщение
#17
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
прикрепи файлы, на которых ты тестируешь.
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
AlexSt |
![]()
Сообщение
#18
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
как это понимать? куда их прикрепить? каким способом?
|
мисс_граффити |
![]()
Сообщение
#19
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
В сообщение.
У тебя же есть файлы var ffam:file of fam;
fnote:file of note;
fchg:file of chg;
ты их уже создал. ввел какую-то информацию, правильно? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
AlexSt |
![]() ![]()
Сообщение
#20
|
Новичок ![]() Группа: Пользователи Сообщений: 38 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
![]() Сообщение отредактировано: AlexSt - 26.05.2007 6:43 Прикрепленные файлы ![]() |
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 7:43 |