Премини към съдържанието
monka987

Помощ с програмата на Паскал

Препоръчан отговор


Здравейте, имам нужда от помощ с програмата на Паскал. Не мога да измисля само процедурата за намиране броя на мъжете с успех над 4,50, родени през есента. 

Условието на програмата е:

За група студенти са зададени име, ЕГН, фак. №, оценките по 10 дисциплини, среден успех. Да се създаде програма, използваща подпрограми за:
- създаване на файл с информация за групата студенти, без да се въвежда ср. успех;
- изчисляване на средния успех на всеки един от студентите;
- намиране брой на мъжете с успех над 4,50, родени през есента.

Ето до къде стигнах:

Program StudentiFile;

type

student=record

ime:string[30];

egn:string[10];

faknom:string[6];

ocenki:array[1..10] of real;

end;

 

var

filestud:file of student;

i,m,n:integer;

imefail:string[20];

group:array[1..30] of student;

stud:student;

C:char;

 

Procedure ReadStud(var stud:student);

var i:integer;

begin

with stud do

begin

write(' ':5,'Въведете име: ');Readln(ime);

If(ime='exit') then exit;

Write(' ':5,'Въведете ЕГН: ');Readln(egn);

write(' ':5,'Въведете Фак. номер: ');Readln(faknom);

Writeln(' ':10,'Въведете 10 оценки:');

for i:=1 to 10 do

begin

write('Въведете оценка [',i,']: ');

readln(ocenki);

while((ocenki>6) or (ocenki<2)) do

begin

writeln('Въведете оценка от 2 до 6!');

write('Въведете оценка[',i,']: ');

readln(ocenki);

end;

end;

Readln;

end;

end;

 

Function SredenUsp(stud:student):real;

var SrUsp,s:real;

i:integer;

begin

s:=0;

for i:=1 to 10 do

s:=s+stud.ocenki;

SrUsp:=s/10;

end;

 

 

Procedure WriteOne(stud:student);

var i:integer;

begin

with stud do

begin

writeln('Име: ',ime);

writeln('ЕГН: ',egn);

writeln('Фак. номер: ',faknom);

writeln('Оценки:');

for i:=1 to 10 do

write(stud.ocenki:4:2,' ':2);

writeln;

writeln('Среден успех: ',SredenUsp(stud):4:2);

writeln;

end;

end;

 

 

Procedure WriteAll;

var stud:student;

begin

Reset(filestud);

while not EOF(filestud) do

begin

Read(filestud,stud);

WriteOne(stud);

end;

close(filestud);

end;

 

Procedure NewFile;

begin

Rewrite(filestud);

Close(filestud);

Writeln('Файлът е създаден!');

end;

 

Procedure AddNewStud;

var stud:student;

begin

writeln('Въведете име или exit за край!');

reset(filestud);

seek(filestud,filesize(filestud));

Repeat

ReadStud(stud);

If stud.ime<>'exit'

then Write(filestud,stud);

until stud.ime='exit';

Close(filestud);

end;

 

Procedure DeleteStud;

var Delfile:file of student;

faknom:string[6];

begin

write('Въведете фак. номер: ');Readln(faknom);

Reset(filestud);

Assign(Delfile,'Del');

Rewrite(Delfile);

While not EOF(filestud) do

begin

Read(filestud,stud);

If stud.faknom<>faknom

then write(Delfile,Stud)

else Writeln('Данните за студент с фак.номер ',faknom,' са изтрити.');

end;

Close(filestud); Close(Delfile); Erase(filestud);

Rename(Delfile,imefail);

Writeln;

End;

 

BEGIN

Write('Задайте име на файла: ');

Readln(imefail);

Assign(filestud,imefail);

Repeat

Writeln(' ':20,'Въведете номера на желаната операция:');

Writeln(' ':15,'1 - за създаване на нов файл');

Writeln(' ':15,'2 - за добавяне на студенти');

Writeln(' ':15,'3 - за изтриване на данни');

Writeln(' ':15,'4 - за извеждане данните на всички студенти');

Writeln(' ':15,'5 – намиране броя на мъжете с успех над 4,50, родени през есента);

Writeln(' ':15,'0 - за изход от програмата');

Readln;

Case C of

'1':NewFile;

'2':AddNewStud;

'3':DeleteStud;

'4':WriteAll;

'5':Maje;

end;

Until C='0';

END.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Правиш процедура с последното условие.

Проверяваш 3-тата и 4-тата цифра от ЕГН-то на човека дали са 09, 10 или 11 (за месеците септември, октомври или ноември), а проверката за мъже се прави по предполседното число, то винаги е четно и накрая да изкарва мъжете с по-голям успех от 4.50. 

Останалото виждам, че си го издокарал/а, добре, че писахме подобни задачи на лекции, а също така наличието на учебник от което може да се вземе 90% от задачата без последното условие за кеото ти питаш. ;)

Колега/колежке да ти напомня, че времето за предаване почти изтече. :)

Редактирано от Excelsior (преглед на промените)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Хаха.. Колега има време до петък! ;):) Пък и малко ми остана. И благодаря!!

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

  • Разглеждащи това в момента   0 потребители

    Няма регистрирани потребители разглеждащи тази страница.

  • Горещи теми в момента

  • Подобни теми

    • от 97joro
      Хора, трябва ми спешно да направя една лесна (според преподавателя) задача на free Pascal, но не съм се занимавал никога с програмиране и за това, ако може някой да помогне със задачата и малко обяснение към нея, ще съм много благодарен.
      Ето и задачата: Да се намери сумата от елементите в отделните стълбове на двумерен масив с m реда и n стълба.
    • от shano__
      Здравейте, имам малко затруднение с тази задача:

      Да се състави главна програма за обработка на три масива IM(10x10) и OM(14x14) и  MB(15,15], където данните са  числа в интервала [-99 -  99]. Съответните подпрограми да извършват следните обработки:
      извеждане на условието на задачата и името на автора; въвеждане на входните данни; извеждане на входните данни; да се състави подпрограма кoятo нaмиpa cумата нa вcички eлeмeнти, които лежат  над  главния диагонал и са по-малки от зададено от клавиатурата число К, да се намери техния брой. Ако няма такива елементи да се нулират елементите на последния ред. Резултатите да се изведат на екрана;  Успях да въведа и изведа данните, но с подпрограмата не мога да се справя. Моля за помощ. Благодаря предварително
    • от pavlin_i
      Имам нужда от малко помощ за една семпла задача на паскал , но явно не е по силите ми ...
      Ето и задачата:
       
      Да се напише програма ,която по зададени два масива А и В намира елементите на масива С(С+А+В).
       
      благодаря предварително
    • от Zuzy
      Здравейте, бих искал да ви попитам как може да напиша една програмка: Даден е знаков низ IZR с дължина не повече от 100, представляващ смислено изречение на български език. Думите в изречението са отделени с интервали или запетаи и то завършва с точка. Да се състави програма на Паскал, която пределя най-дългата и най-късата дума в изречението.  Благодаря ви предварително
    • от metobest
      Здравейте! Имам следния проблем : В средата за програмиране Turbo Pascal трябва да извърша действието степенуване , но когато напиша следния код : var a,b,x:real; begin write('a='); read(a); write('b='); read(b); x:=a^b; write('x=',x) end. ми дава грешка в знака " ^ " .Ако може да ми кажете къде е грешката и как може да се степенува ще съм ви много благодарен
  • Дарение

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.