1 Востаннє редагувалося Torbins (12.12.2013 10:29:44)

Тема: Комбіновані типи

Допоможіть розібратись будь-ласка.
{ПРОГРАМА РОБОЧА, але морочать голову щоб " Prizv:string [25]; " - переробити через масив, мені здається доцільніше буде через строку..тому не знаю як вліпити туди через масив і взагалі навіщо..; ще "Bal" я написала через byte, може треба integer? бо підкреслили мені..але ж бал і так цифру 5 чи 10 не перевищить, нащо більшого діапазону чисел? маразм якийсь, домахують за кожну дрібницю..}

Завдання:
Обчислити середній бал групи за останню сесію і роздрукувати
список студентів, котрі мають середній бал, нижчий від середнього
балу групи. Для кожного студента вказати дату народження, рік всту-
пу у вищий навчальний заклад, курс, групу, оцінки за кожну сесію.

program lab11;
uses crt;
const
k_elem = 3;
type
Tzap = record
Prizv:string [25];
R_nar:word;
R_Zak:word;
R_Vst:word;
Kurs:word;
Grupa:word;
Bal:byte;
end;
var
a:array [1..k_elem] of Tzap;
i:integer;
sum,ser:real;

BEGIN clrscr;
for i:=1 to k_elem do
with A[i] do begin
write('prizvushe studenta:');
readln(Prizv);
write ('rik narodgenny studenta:');
readln(R_nar);
write('rik vstupu:');
readln(R_vst);
write('kurs:');
readln(kurs);
write('grupa:');
readln(grupa);
write('bal za sesiu:');
readln(bal);
end;
writeln('vuvedeny pochatkovux danux y vuhliadi tabluzi');
for i:=1 to k_elem do
with A[i] do begin
writeln (Prizv,'':(17-length(Prizv)), R_nar:5, R_vst:5, Kurs:3,
Grupa:5,  Bal:3);
end;
writeln ('vuvedenny anketnuh danuh studentiv scho mauty ozinku vuschinish 3');
writeln ('':5,'Prizvusche','':6,'Rik narodshenny','':2,'Rik zakinchenny shcolu');

for i:=1 to k_elem do
with A[i] do begin
sum:=sum+bal;
end;
ser:=sum/k_elem;
writeln;
for i:=1 to k_elem do
with A[i] do begin
if (bal<ser) then
writeln (Prizv, '':(25-length(Prizv)), grupa, '':6, bal:5);
end;
readln;
END.

2

Re: Комбіновані типи

1. Розставте відступи (begin і repeat - плюс два пробіли, end і until - мінус два пробіли).
Власне, у мене перелік зауважень на цьому закічнується. Якщо воно працює - вимагайте у викладача ВИЧЕРПНИЙ перелік зауважень або конкретні настанови з оформлення (guidelines); якщо їх нема - готовий чинити на вашого викладача моральний тиск у вигляді листа чи телефонного дзвінка, щоб у вас прийняли роботу.

Подякували: Меліса, Chemist-i2

3

Re: Комбіновані типи

Не зміг втриматись і структуризував код:

Прихований текст
program lab11;
uses crt;

const k_elem = 3;

type
  Tzap = record
    Prizv:string [25];
    R_nar:word;
    R_Zak:word;
    R_Vst:word;
    Kurs:word;
    Grupa:word;
    Bal:byte;
  end;

var a:array [1..k_elem] of Tzap;
    i:integer;
    sum,ser:real;
 
BEGIN 
  clrscr;
  for i := 1 to k_elem do
    with A[i] do 
    begin
      write('prizvushe studenta:');
      readln(Prizv);
      
      write ('rik narodgenny studenta:');
      readln(R_nar);
      
      write('rik vstupu:');
      readln(R_vst);

      write('kurs:');
      readln(kurs);
       
      write('grupa:');
      readln(grupa);

      write('bal za sesiu:');
      readln(bal);
    end;

  writeln('vuvedeny pochatkovux danux y vuhliadi tabluzi');
  for i := 1 to k_elem do
    with A[i] do 
    begin
      writeln (Prizv,'':(17-length(Prizv)), R_nar:5, R_vst:5, Kurs:3,
      Grupa:5,  Bal:3);
    end;
      
  writeln ('vuvedenny anketnuh danuh studentiv scho mauty ozinku vuschinish 3');
  writeln ('':5,'Prizvusche','':6,'Rik narodshenny','':2,'Rik zakinchenny shcolu');
 
  for i := 1 to k_elem do
    with A[i] do 
    begin
      sum := sum + bal;
    end;
      
  ser := sum / k_elem;
  writeln;

  for i := 1 to k_elem do
    with A[i] do 
    begin
      if (bal < ser) then writeln (Prizv, '':(25 - length(Prizv)), grupa, '':6, bal:5);
    end;
  readln;
END.

Можна також прибрати деякі begin/end і тоді вийде:

Прихований текст
program lab11;
uses crt;

const k_elem = 3;

type
  Tzap = record
    Prizv:string [25];
    R_nar:word;
    R_Zak:word;
    R_Vst:word;
    Kurs:word;
    Grupa:word;
    Bal:byte;
  end;

var a:array [1..k_elem] of Tzap;
    i:integer;
    sum,ser:real;
 
BEGIN 
  clrscr;
  for i := 1 to k_elem do
    with A[i] do 
    begin
      write('prizvushe studenta:');
      readln(Prizv);
      
      write ('rik narodgenny studenta:');
      readln(R_nar);
      
      write('rik vstupu:');
      readln(R_vst);

      write('kurs:');
      readln(kurs);
       
      write('grupa:');
      readln(grupa);

      write('bal za sesiu:');
      readln(bal);
    end;

  writeln('vuvedeny pochatkovux danux y vuhliadi tabluzi');
  for i := 1 to k_elem do
    with A[i] do 
    begin
      writeln (Prizv,'':(17-length(Prizv)), R_nar:5, R_vst:5, Kurs:3,
      Grupa:5,  Bal:3);
    end;
      
  writeln ('vuvedenny anketnuh danuh studentiv scho mauty ozinku vuschinish 3');
  writeln ('':5,'Prizvusche','':6,'Rik narodshenny','':2,'Rik zakinchenny shcolu');
 
  for i := 1 to k_elem do
    with A[i] do sum := sum + bal;
      
  ser := sum / k_elem;
  writeln;

  for i := 1 to k_elem do
    with A[i] do 
      if (bal < ser) then writeln (Prizv, '':(25 - length(Prizv)), grupa, '':6, bal:5);
  readln;
END.

В майбутньому, старайтесь виділити так як сказав koala, тому що читати суцільний текст, а тим більш код, не є приємною справою, адже потрібно не тільки прочитати, але і зрозуміти.

Подякували: koala, Меліса2

4

Re: Комбіновані типи

Меліса написав:

морочать голову щоб " Prizv:string [25]; " - переробити через масив, мені здається доцільніше буде через строку..тому не знаю як вліпити туди через масив і взагалі навіщо..

Можна застосувати масив, щоб зберігати іще ім'я та побатькові:
PIB: array[1 .. 3] of string[25];

Меліса написав:

ще "Bal" я написала через byte, може треба integer? бо підкреслили мені..але ж бал і так цифру 5 чи 10 не перевищить, нащо більшого діапазону чисел?

Скоріше за все, викладач має на увазі, що бал може бути дробовим числом.

Подякували: Меліса1

5

Re: Комбіновані типи

Torbins
Дякую за ідею з ПІП  :) 
але на жаль нас заганяють в чіткі (подекуди безглузді) рамки, тому ми повинні робити тільки так як нам кажуть (як пише в університетській книжці, і тільки) і якщо прізвище, то тільки прізвище.

якщо дробовим (тобто десятковиим) то потрібно було б застосовувати real чи інший дійсний тип для опису десяткових значень, а тут казали тільки integer, тобто бал має бути цілочисельного типу.

6

Re: Комбіновані типи

Є ще (малоймовірний) варіант, що викладач хоче отримати аргументовану відповідь, чому тут має бути byte, а не integer.
Моя пропозиція стосовно морального тиску лишається в силі.

Подякували: Меліса1

7 Востаннє редагувалося Меліса (12.12.2013 21:20:51)

Re: Комбіновані типи

Koala,

Якраз ніякої відповіді вона чути не хоче. Просто каже що не так, і змушує переробляти за підручником, а якщо почати спорити, то починає нахабно ігнорувати, і говорити до інших, а тобі лише залишається обернутися і піти на своє місце (як б це безглуздо не звучало, однак правдиві релії)

8 Востаннє редагувалося Chemist-i (12.12.2013 21:57:29)

Re: Комбіновані типи

Меліса написав:

Koala,

Якраз ніякої відповіді вона чути не хоче. Просто каже що не так, і змушує переробляти за підручником, а якщо почати спорити, то починає нахабно ігнорувати, і говорити до інших, а тобі лише залишається обернутися і піти на своє місце (як б це безглуздо не звучало, однак правдиві релії)

Прихований текст

А Ви принесіть до ВНЗ Кольт, я думаю після цього викладачка не зможе Вас нахабно ігнорувати

Подякували: Меліса1

9

Re: Комбіновані типи

Меліса написав:

Koala,

Якраз ніякої відповіді вона чути не хоче. Просто каже що не так, і змушує переробляти за підручником, а якщо почати спорити, то починає нахабно ігнорувати, і говорити до інших, а тобі лише залишається обернутися і піти на своє місце (як б це безглуздо не звучало, однак правдиві релії)

Загалом я знаю навіщо вона від вас то вимагає, ну хоча би здогадку маю :) Зараз із вільним часом у мене кепсько, тож написати та пояснити те все не маю змоги. Загалом дам підказку, строчка вже є масивом елементів Char чи byte, але не пам'ятаю чи дозволяє з цим масивом як зі строчкою працювати Pascal, тож спробуйте, вона хоче щоб ви освоїли використання Chr() та Ord(). Я точно не пам'ятаю, але просто згадав, що таке вже розглядається на етапі вивчення властивостей строк, тобто коли строку представляють як масив. До речі, нульовий елемент строки є показником її довжини, тож щоб було можливо працювати - не забудьте про це, також раджу описати цей масив як тип, а потім вже у своєму основному використовувати, також можна змінні що мають обмежену кількість значень (місяць, день тижня, день місяця, стать і т.д.) описувати як записи з фіксованим набором значень. :)

Подякували: Меліса1

10 Востаннє редагувалося Меліса (13.12.2013 01:39:47)

Re: Комбіновані типи

Chemist-i

а Ви дотепник  :)
я б з радістю, та не володію на жаль такою холодною зброєю)

HetmanNet

Дякую за поради, неодмінно скористаюсь  :)
До речі, про "Chr() та Ord()" вона навіть і не згадувала, отож маю сумніви, що вимагає саме цього, скоріше мізки просто морочить, щоб затягнути час і не дати вчасно лаби захистити  :(  програма ж то робоча..

11

Re: Комбіновані типи

HetmanNet написав:

не пам'ятаю чи дозволяє з цим масивом як зі строчкою працювати Pascal

За Паскаль не пам'ятаю, а от Делфі дозволяє, якщо масив оголошено так: array[0..n] of Char. Щоправда у цьому не багато сенсу, бо такий масив не може змінювати свою довжину, отож працювати з ним не зручно.

Подякували: Меліса1