Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2008, 11:50   #1
Дима82
Форумчанин
 
Аватар для Дима82
 
Регистрация: 09.05.2008
Сообщений: 108
По умолчанию Помогите с программированием обработки файлов (Pascal)

Программирование операций обработки файлов

Выбор студентов, сдавших сессию на "4" и "3"

При каждом запуске про¬граммы, а читаются из текстового файла на диске. Этот файл перед запуском программы необходимо создать с помощью специальной программы, которая вводимые с клавиатуры значения полей записей помещает в файл записей.
Записи, выбранные согласно условию из входного файла,
должны быть помещены в выходной файл записей, который созда
ется на диске.



Помогите решить эту задачу, никак не пойму как это сделать... Срочно надо на завтра...
Дима82 вне форума Ответить с цитированием
Старый 25.05.2008, 13:01   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
При каждом запуске про¬граммы, а читаются из текстового файла на диске. Этот файл перед запуском программы необходимо создать с помощью специальной программы, которая вводимые с клавиатуры значения полей записей помещает в файл записей.
Так файл исходный какой?
1) создание первого файла
Код:
type
  zap = record
    fio :string[30];
    ball: byte;
  end;
var
  f1: file of zap;
  z: zap;
  ...
begin
  assign(f1, '1.dat');
  rewrite(f1);
  for i :=1 to 10 do // 10-кол-во человек
  begin
    write('fio = '); readln(z.fio);
    write('ball = '); readln(z.ball);
    write(f1, z) //запись в файл 1
  end;
  close(f1);
end.
2) выборка учащихся
Код:
type
  zap = record
    fio :string[30];
    ball: byte;
  end;
var
  f1, f2: file of zap;
  z: zap;
  ...
begin
  assign(f1, '1.dat');
  reset(f1);
  assign(f2, '2.dat');
  rewrite(f2);
  while not eof(f1) do
  begin
    read(f1, z); //читаем первый файл
    if (z.ball=4) or (z.ball=3) then write(f2,z); //записываем во второй
  end;
  close(f1);
  close(f2)
end.
Код не тестировал

Последний раз редактировалось eoln; 25.05.2008 в 13:03.
eoln вне форума Ответить с цитированием
Старый 25.05.2008, 13:05   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Чтобы понять как это делать, нужно книжки умные читать, там это написано и примеры есть.
Чтобы ты сильно не донимал вопросами на этот раз, привожу решение с максимально возможными комментариями. Поскольку вы не соизволили привести какие-либо условия задачи, принял, что в записи участвуют фамилия студента и его оценки по пяти предметам. Если условие немного другое, то легко подправишь.
Код:
uses crt;
type Tstud=record  //создаем запись с полями
           fam:string[20];  //фамилия
           ball:array[1..5] of 2..5; //оценки по пяти предметам
           end;
var sp:array[1..30] of Tstud; //массив записей
    f,g:file of Tstud;  //типизированные файлы
    n,i,j,k,m:integer;
begin
clrscr;
assign(f,'stud1.dat'); //создаем первый файл
rewrite(f);             //открываем для записи
write('Kolichestvo studentov: ');
readln(n);
for i:=1 to n do
   begin
     writeln('Student ',i);    //заполняем массив
     write('Familia: ');readln(sp[i].fam);
     write('Ocenka 1: ');readln(sp[i].ball[1]);
     write('Ocenka 2: ');readln(sp[i].ball[2]);
     write('Ocenka 3: ');readln(sp[i].ball[3]);
     write('Ocenka 4: ');readln(sp[i].ball[4]);
     write('Ocenka 5: ');readln(sp[i].ball[5]);
     write(f,sp[i]);  //записываем его в файл
   end;
close(f);  //закрываем файл
reset(f);   //открываем для чтения
n:=0;
while not eof(f) do
   begin
    n:=n+1;
    read(f,sp[n]); //считываем записи из файла в массив
   end;
close(f);  //закрываем файл
writeln;
assign(g,'stud2.dat');//создаем второй файл для записи
rewrite(g);
writeln('Sdali na 3 i 4:');
writeln;
for i:=1 to n do
   begin
    k:=0;
    for j:=1 to 5 do
     if (sp[i].ball[j]=3)or(sp[i].ball[j]=4)then
       begin
         k:=k+1;
       end;
    if k=5 then  //если все оценки 3 и 4 то
       begin
        write(sp[i].fam,' ');//выводим на экран фамилию
        for m:=1 to 5 do
        write(sp[i].ball[m],' ');//выводим все оценки
        writeln;
        write(g,sp[i]);//записываем во второй файл
       end;
  end;
readln;
close(g);//закрываем его
end.
Как-то мы дружно написали. У меня код протестирован, работает, но вот про создание файла отдельной программой я просмотрел. Так-что из двух программ сделаешь одну, очень хорошую.

Последний раз редактировалось puporev; 25.05.2008 в 13:13.
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка файлов (Pascal) Дима82 Помощь студентам 10 02.06.2008 21:46
Помогите с программированием операций обработки файлов(Pascal) Дима82 Помощь студентам 11 24.05.2008 18:02
Программирование операций обработки файлов Дима82 Фриланс 1 19.05.2008 13:57
Макрос в Excel для обработки группы файлов ad_sum Microsoft Office Excel 1 29.12.2007 16:56