• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задача на файлы, Паскаль АВС

Сабыржан

Ученик
Регистрация
15 Ноя 2011
Сообщения
10
Реакции
0
Баллы
0
Задача на файлы, Паскаль АВС

Условие задачи: в деканате имеются сведения о студентах группы : фамилия имя студента.
Оценки полученные во время экзаменационной сессии Составить программу назначения стипендии студентам
по результатам сессии, используя следующие правила: 1) если все оценки 5, назначается повышенная стипендия;
2) если все оценки 4 и 5, назначается обычная стипендия; 3) если есть оценка 3, стипендия не назначается.
В результате работы программы нужно:
1. напечатать список группы с оценками,
2. средний балл каждого студента,
3. средний балл группы по предмету,
4. списки фамилий (назначенных на повышенную стипендию),
5. количество студентов (назначенных на обычную стипендию),
6. списки студентов неуспевающих по заданной дисциплине.

вот на что хватило моих соображений и усилий(не на много((().
program semestr1zad;
uses crt;
const put = 'D:\students.txt';
type ses=record
fam:string[25];
zz: Array [1..50] of Integer;
zn: Integer;
end;
var p: ses;
m: Array[0..100] of ses;
f: text;
x,i,j,n: integer;
st:string[3];

procedure app;
var t:String;
begin
rewrite(f);
repeat
write('Vvedi familiyu studenta : ');readln(p.fam);writeln(f,p.fam);
write('Vvedi kolichestvo ocenok studenta: ');readln(p.zn);writeln(f,p.zn);
for i:=1 to p.zn do begin
write('Vvedi ocenky #',i,' : ');readln(p.zz);writeln(f,p.zz);
end;
writeln('Prodolgit yes/no?');
readln(st);
until st='no';
close(f);
end;

procedure prosm;
var ss,sr:real;
begin
reset(f);
while not eof(f) do begin
readln(f,p.fam);
Writeln(p.fam);Write('Ocenki : ');
readln(f,p.zn);
ss:=0;
for i:=1 to p.zn do begin
readln(f,p.zz);
ss:=ss+p.zz;
Write(p.zz,', ');
end;
sr:=ss/p.zn;
writeln;writeln('Sredniy bal : ',sr:4:2);
writeln('----------------------------------------');
end;
Writeln('------------ NAZHMITE ENTER ------------');Readln;
close(f);
end;
procedure stipendii;
var sum:Integer;
flag:boolean;
begin
reset(f);
i:=0;
while not eof(f) do begin
inc(i);
readln(f,p.fam);readln(f,p.zn);
for j:=1 to p.zn do readln(f,p.zz[j]);
m:=p;
end;
n:=i;
close(f);
writeln('familii na povisennyu stipendiu : ');
for i:=1 to n do begin
sum:=0;
for j:=1 to m.zn do sum:=sum+m.zz[j];
if sum=(m.zn*5) then writeln(m.fam);
end;
writeln('familii na obicnyy stipendiu : ');
for i:=1 to n do begin
sum:=0;flag:=true;
for j:=1 to m.zn do begin
sum:=sum+m.zz[j];
if m.zz[j]<4 then flag:=false;
end;
if flag and (sum<(m.zn*5)) then writeln(m.fam);
end;
writeln('Stipendia ne naznachaetsa spisok studentov ne uspevaysh: ');
for i:=1 to n do begin
flag:=false;
for j:=1 to m.zn do if m.zz[j]<4 then flag:=true;
if flag then writeln(m.fam);
end;
Writeln('------------ NAZHMITE ENTER ------------');Readln;
end;

begin
assign(f,put);
repeat
writeln('viberite nujnii punkt menu');
writeln('1 - zapolnenie faila dannymi');
writeln('2 - svedenia o studentah');
writeln('3 - stipendii');
writeln('4 - vyxod');
readln(x);
case x of
1:app;
2:prosm;
3:stipendii;
end;
until x=4;
end.

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

Вложения

Всем привет! пожалуиста отредактируите мою задачу. что бы код был без лишних "слов" , "символов". Я тут сам пытаюсь. но мне не нравится. Мне ее скоро ( во вторник) показывать. и от нее многое решается...((
 
Да но... как же это у Вас каждый студент сдает разное количество экзаменов?! Я бы понял, если бы количество экзаменов у всех студентов было одинаковым, и тогда каждая строка соответствовала бы какой-либо дисциплине. Например, первая цифра после фамилии каждого студента - это оценка по информатике, вторая - по химии ну и т.п.. А так...
Поэтому могу предложить свой вариант:
1. Данные о студентах не вносятся в файл, а считываются из заранее (в любом текстовом редакторе) подготовленного файла. Вид файла (латиница - только для удобства, можете заменить):
Код:
Ivanov Petr
5
4
5
4
5
Petrov Ivan
5
5
5
5
5
Sidorov Sergey
5
2
5
4
5
Kovalchuk Anton
3
2
5
4
5
Shmidt Valera
5
4
4
5
4
ВАЖНО: файл не должен в конце содержать пустых строк!
Количество студентов заранее не устанавливается, т.е. можно, например, добавить еще.

2. Все студенты сдают одинаковое количество экзаменов (в данном случае - 5, в программу это число "зашито", менять нельзя), каждая строка оценок соответствует определенной дисциплине. Список дисциплин введен в программу в виде константы.

3. Естественно, имя и расположение файла можете поменять на свой вкус.

Программа:
Код:
const
 put = 'D:\students.txt';
 Sci:Array[1..5] of String=('Informatics','Chemistry','Mathematics',
                            'Physics','Physical Training');
type 
 ses=record
       fam:string;
       mark:Array [1..5] of Byte;
     end;
 St=Set of Byte;
var
 p: ses;
 m: Array[0..100] of ses;
 f: text;
 i,j,k,l,n,x: integer;

procedure app;
begin
 assign(f,put);
 reset(f);
 n:=1;
 repeat
  with m[n] do
   begin
    readln(f,fam);
    for i:=1 to 5 do
     readln(f,mark[i]);
   end;
  if not(EoF(f)) then Inc(n);
 until EoF(f);
 close(f);
end;

procedure prosm;
var Sred:real;
begin
 for i:=1 to n do
  with m[i] do
   begin
    Sred:=0;
    write(i:2,'. '+fam);
    for j:=length(fam) to 25 do write(' ');
    for j:=1 to 5 do
     begin
      write(mark[j]:4);
      Sred:=Sred+mark[j]/5;
     end;
    writeln(Sred:8:2);
   end;
 writeln;
end;

procedure stipendii;
var
 flag:boolean;
 Pov:St;
begin
 writeln('Familii na povishennuju stipendiju : ');
 k:=0;
 Pov:=[];
 for i:=1 to n do
  with m[i] do
   begin
    flag:=true;
    j:=0;
    repeat
     Inc(j);
     if mark[j]<5 then flag:=false;
    until not(flag) or (j=5);
    if flag then
     begin
      Inc(k);
      writeln(k:2,'. '+fam);
      Pov:=Pov+[i];
     end;
   end;
 writeln;
 writeln('Familii na obychnuju stipendiju : ');
 k:=0;
 for i:=1 to n do
  with m[i] do
   begin
    flag:=true;
    j:=0;
    repeat
     Inc(j);
     if mark[j]<4 then flag:=false;
    until not(flag) or (j=5);
    if flag and Not(i in Pov) then
     begin
      Inc(k);
      writeln(k:2,'. '+fam);
     end;
   end;
 writeln;
end;

procedure lobotrjasy;
begin
 for l:=1 to 5 do
  begin
   writeln(Sci[l]+':');
   k:=0;
   for i:=1 to n do
    with m[i] do
     if mark[l]=2 then
      begin
       Inc(k);
       writeln(k:2,'. '+fam);
      end;
   writeln;
  end;
 writeln;
end;

BEGIN
 app;
 repeat
  writeln('viberite punkt menu:');
  writeln('                   1 - svedenia o studentah');
  writeln('                   2 - stipendii');
  writeln('                   3 - spisok neuspevajushchih');
  writeln('                   4 - vyxod');
  readln(x);
  case x of
    1:prosm;
    2:stipendii;
    3:lobotrjasy;
  end;
 until x=4;
END.
 
ОГРОМНЕЙШЕЕ СПАСИБО Vladimir_S! Я ВАМ БЕЗУМНО БЛАГОДАРЕН!!!!!
вы не представляете как вы меня выручаете.))))))
 
Назад
Сверху