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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2014, 20:13   #11
Marksman_SwAt
Пользователь
 
Аватар для Marksman_SwAt
 
Регистрация: 01.05.2014
Сообщений: 19
По умолчанию

А если больше восьми, то сюда:
Код:
procedure vyvod;
var
  x,i,j:integer;
begin
  write('Выберите номер дисциплины для вывода списка студентов (1-5): ');
  readln(x);
  writeln('N', 'Фамилия':9, 'Группа':12, 'Средний балл':15);
  i:=1;
  while not EOF(f) do
    begin
      read(f,stud[i]);
      i:=i+1;
     end;
  for j:=1 to i-1 do
    begin
      with stud[j] do
        if predmety[x]='1' then
          writeln(j, fam:10, grup:8, bal:10:2,predmety[x]:8);
    end;
  writeln('Нажмите <ENTER> для продожения работы...');
  close(f);
  readln();
end;
нужно добавить условие (if>8 then), и дальше сортировать у кого больше балл ? Так?

Последний раз редактировалось Marksman_SwAt; 06.05.2014 в 20:22.
Marksman_SwAt вне форума Ответить с цитированием
Старый 06.05.2014, 21:08   #12
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Я бы сделал так
Код:
  // считаем первым прходом кол-во студентов = данному условию
  Number:=1; usl:=false;
  for j:=1 to i-1 do
    begin
      with stud[j] do
        if predmety[x]='1' then
          Number:=number+1;
        If number >8 then 
           Begin
             Usl:=true; break;
            End;
  End;
  // а теперь выводим только тех кого нужно
// в зависимости от условия

  for j:=1 to i-1 do
    begin
      with stud[j] do
         If usl then
            if (predmety[x]='1' ) and (bal>3.5) then
// здесь вывод
         Else 
       if (predmety[x]='1' )  then
// здесь вывод
Как-то так
без поллитры наверно трудно понять мое косноязычие
Если не получится, свистните, попробую пояснить, либо доделать

Последний раз редактировалось ZX Spectrum-128; 06.05.2014 в 21:21.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 06.05.2014, 21:27   #13
Marksman_SwAt
Пользователь
 
Аватар для Marksman_SwAt
 
Регистрация: 01.05.2014
Сообщений: 19
По умолчанию

Что-то у меня вообще перестало искать (я просто вставил в процедуру vyvod)
Marksman_SwAt вне форума Ответить с цитированием
Старый 06.05.2014, 21:29   #14
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Хорошо, сейчас поковыряюсь
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 06.05.2014, 21:41   #15
Marksman_SwAt
Пользователь
 
Аватар для Marksman_SwAt
 
Регистрация: 01.05.2014
Сообщений: 19
По умолчанию

Вы очень отзывчивый человек и стараетесь всем помочь, где не глянь, везде ваши ответы. Спасибо вам за помощь, побольше бы таки людей.

( сам стараюсь помочь, если что-то знаю, уже двум одногрупникам помог, а сам еще маюсь с этими задачками)
Marksman_SwAt вне форума Ответить с цитированием
Старый 06.05.2014, 22:05   #16
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Код:
uses
  crt;
Type
  discip=record
    fam:string[20];
    grup:string[10];
    predmety:array [1..5] of char;
    bal:real;
  end;
var
  f,d: file of discip;
  pac:array[1..10] of discip;
  i,n:integer;

procedure dobavlenie;
var
  j,i:integer;
begin
  writeln('Введите количетво студентов ');
  readln(n);
  for i:=1 to n do
    begin
      writeln('Введите данные об ', i ,' студенте ');
      with pac[i] do
        begin
          write('Фамилия ');
          readln(fam);
          write('Группа ');
          readln(grup);
          write('Средний балл ');
          readln(bal);
          for j:=1 to 5 do
            begin
              write(j,'-я дисциплина: ');
              readln(predmety[j]);
            end;
        end;
        seek(f,filesize(f));
        write(f,pac[i]);
    end;
  close(f);
  writeln('Запись успешно добавлена!');
  writeln('Нажмите <ENTER> для продожения работы...');
  readln();
end;


procedure udalenie;
var toDelete:integer;
begin
assign(d,'temp.dat');
rewrite(d);
writeln('Введете номер записи для удаления');
readln(toDelete);
i:=1;
while not EOF(f) do
begin
  read(f,pac[i]);
  if (toDelete <> i) then write(d,pac[i]);
  i:=i+1;
end;
close(f);
close(d);
Erase(f);
Rename(d,'discip.dat');
writeln('Запись успешно удаленна!');
writeln('Нажмите <ENTER> для продожения работы...');
readln();
end;

procedure vyvod;
var
  number,k,x,i,j:integer;
  usl:boolean;
begin
  write('Выберите номер дисциплины для вывода списка студентов (1-5): ');
  readln(x);
  write('N', 'Фамилия':9, 'Группа':12, 'Средний балл':15);
  writeln(' 1 ',' 2 ',' 3 ',' 4 ', ' 5 ');
  i:=1;
  while not EOF(f) do
    begin
      read(f,pac[i]);
      i:=i+1;
     end;
  Number:=1;
  usl:=false;
  for j:=1 to i-1 do
    begin
      with pac[j] do
        if predmety[x]='1' then
          Number:=number+1;
        If number >8 then
           Begin
             Usl:=true;
             break;
            End;
  End;
  writeln;
//  writeln(number,usl);
  // а теперь выводим только тех кого нужно
  // в зависимости от условия

  for j:=1 to i-1 do
    begin
      with pac[j] do
      if usl then
        begin
          if (predmety[x]='1') and (bal>3) then
            begin
              write(j:3, fam:10, grup:8, bal:10:2, ' ':5);
              for k:=1 to 5 do
                write(pac[j].predmety[k]:3);
              writeln;
            end;
        end
      else
        begin
          if (predmety[x]='1')  then
            begin
              write(j:3, fam:10, grup:8, bal:10:2, ' ':5);
              for k:=1 to 5 do
                write(pac[j].predmety[k]:3);
              writeln;
            end;
        end



    end;
  writeln('Нажмите <ENTER> для продожения работы...');
  close(f);
  readln();
end;

procedure sozd;
begin
  Assign(f,'discip.dat');
  rewrite(f);
  pac[1].fam:='Gates';
  pac[1].grup:='Microsoft';
  pac[1].bal:=0.0;
  pac[1].predmety[1]:=' ';
  pac[1].predmety[2]:=' ';
  pac[1].predmety[3]:=' ';
  pac[1].predmety[4]:=' ';
  pac[1].predmety[5]:=' ';
  write(f,pac[1]);
  close(f);
end;

procedure mainMenu;
begin
  Assign(f,'discip.dat');
  reset(f);
  clrscr;
  writeln('Программа для работы с клиентами');
  writeln('Выберите пункт');
  writeln('1. Добавить запись в файл');
  writeln('2. Удалить запись из файла');
  writeln('3. Вывод содержимого на экран');
  writeln('4. Cоздание файла');
  writeln('6. Выход');
  writeln();
  write('-> ');
end;

{---------------main programm}
begin
while true do
  begin//start:
    mainMenu;
    readln(n);
    case n of
      1: dobavlenie;
      2: udalenie;
      3: vyvod;
      4: sozd;
      6: exit;
    end;
  end;
//goto start;
end.
Первый скрин без условия более 8 чел, втророй с ним
Изображения
Тип файла: jpg 2014-05-06 21-52-52 Free Pascal IDE.jpg (31.8 Кб, 131 просмотров)
Тип файла: jpg 2014-05-06 22-01-44 Free Pascal IDE.jpg (30.9 Кб, 127 просмотров)
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 06.05.2014, 22:16   #17
Marksman_SwAt
Пользователь
 
Аватар для Marksman_SwAt
 
Регистрация: 01.05.2014
Сообщений: 19
По умолчанию

Спасибо огромное.
Сразу не понял что за 1 2 3 4 5, а потом разобрался. Спасибо еще раз.
Marksman_SwAt вне форума Ответить с цитированием
Старый 06.05.2014, 22:21   #18
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Советую средний балл, по которому идет выборка студентов, так же делать запросом от пользователя. А то в программе жестко забито >3
С выводом результатов в текстовый файл разберетесь сами?
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 06.05.2014, 23:14   #19
Marksman_SwAt
Пользователь
 
Аватар для Marksman_SwAt
 
Регистрация: 01.05.2014
Сообщений: 19
По умолчанию

Из всех студентов(кто желает слушать именно этот предмет) должно отсортироваться 8, у которых самый высокий бал. Но думаю и так подойдет, изменю на число побольше.

Цитата:
Сообщение от ZX Spectrum-128 Посмотреть сообщение
С выводом результатов в текстовый файл разберетесь сами?
А все данный записываются в файл discip.dat. Или вы имели в виду что-то другое?
Marksman_SwAt вне форума Ответить с цитированием
Старый 06.05.2014, 23:38   #20
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

В условии задачи нет сортировки. При превышении количества более 8 необходимо отобрать только тех, у кого средний балл выше какого-то заданного.
Что и делается в коде
bal>3
Поэтому и желательно запросить у пользователя - выше какого среднего балла выводить списрк.
Цитата:

На экран и в отдельный файл вывести списки студентов, желающих прослушать дисциплину Х
Необходимо вывод списка студентов, который происходит на экран, продублировать выводом в текстовый файл.
ZX Spectrum-128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Типизированный файл -> удаление Pascal ABC Vla00 Помощь студентам 0 30.04.2012 02:46
Заполнить типизированный файл целыми числами, увеличить вдвое компоненты файла, стоящие после максимального (turbo pascal) Irishka_F Помощь студентам 3 30.01.2012 23:36
Типизированный файл Pascal. Работа с данными. Jimmy_93 Помощь студентам 0 26.05.2011 16:35
Первую почти сделал Ko$ Помощь студентам 0 16.03.2011 14:18
[Pascal]типизированный файл+записи Fuaran8989 Помощь студентам 4 30.11.2008 14:01