[Pascal]Tablica rekordow

0

No wiec tak dawno nie bawilem sie w programowanie a musze napisac takie cudo:
Stwórz tablicę rekordów zawierającą dane dla pięciu studentów. Kazdy z
nich posiadać powinien nazwisko i oceny z trzech przedmiotów:
informatyki, matematyki oraz krystalografii.
Napisz program, który liczy średnią z tych ocen dla kazdego studenta, a
następnie wskazuje, który z nich ma najwyzszą średnią i podaje jaką.
Czyli musze utworzyc tablice wielowymiarowa i zadeklarowac ja jako stala tak? dobrze mysle?
A program powinien wygladac w ten sposob ze wpisuje imie nazwisko ucznia zostaja wyswietlone mi oceny i srednia ucznia i kto ma wyzsza srednia od niego badz mniejsza tak chyba by bylo najlepiej co Wy na to?

0

Użyłbym typu rekordowego.
Wyprzedzając kolejne pytanie:
Informacje znajdziesz tutaj: http://adawo.wordpress.com/encpascal/typy-danych/typ-rekordowy/

0

Nie wiem w czym problem i nie wiem dlaczego chcesz używac talibcy
wielowymiarowej - skoro ma być pięciu studentów to robisz tablicę 5
elementową typu rekordowego zawierającego wszystkie dane, a jeśli
chodzi o średnią studenta to sumujesz wszystkie jego oceny, dzielisz
przez trzy bo tyle jest przedmiotów, a sortowanie to najprościej - na
początku ustawić zmienną na przykład Max := 0; i polecieć pętlą po
elementach tablicy studentów, w której najlepiej zawrzeć również tę
średnią. I teraz jeżeli Śtednia > Max to ustawić Max na tę średnią, a
następnie można zrobić jeszcze raz pętlę i wypisać nazwiska tych, z
najwyższą średnią (równą Max) - w przypadku gdy więcej niż jeden
student ma najwyższą średnią. I nie ma się co rozwodzić nad takim
prostym programem, komplikując sobie życzie - tylko go napisać :)

0

dziekoweczka pozniej postaram sie cos naskrobac i zobacze jak mi to bd szlo

0

Jajku jest gorzej niz myslalem wszystko pozapominalem wykminilem taka tablice jstem na dobrym tropie czy nie batrdzo?
[code]program project1;
uses crt;
type
TDane = record
Imie: string;
Nazwisko: string;
Przedmiot: string;
Srednia: Integer;

end;
const
Studenci: array[1..5] of TDane = (
(Imie: 'Adam'; Nazwisko: 'Kowalski'; Przedmiot: 'Krystalografia , Matematyka, Krystalografia';),
(Imie: 'Jan'; Nazwisko: 'Iksinski'; Przedmiot: 'Krystalografia, Matematyka, Krystalografia';),
(Imie: 'Zenon'; Nazwisko: 'Kuter'; Przedmiot: 'Krystalografia, Matematyka, Krystalografia';),
(Imie: 'Pawel'; Nazwisko: 'Tarko'; Przedmiot: 'Krystalografia, Matematyka, Krystalografia';),
(Imie: 'Darek'; Nazwisko: 'Adamczyk'; Przedmiot: 'Krystalografia, Matematyka, Krystalografia';));
begin

end. [/code]

0

Tak, jesteś na dobrym tropie. Teraz trzeba wymyśleć jak przechowywać oceny.
Średnią raczej zdefiniuj jako real.

0

Sam sprawdziłem czy to aż takie trudne zadanie, po obejrzeniu seriali siadlem
celowo do wusłużonego TP 7.0 bo nie chce mi się instalowac FPC, dlatego mi
aż kilkanaście minut zajeło napisanie tego, bo jak wiadomo Turbo Pascal, ma
durne skróty klawiszowe do operacji na tekstcie, a ja wolę te Windowsowe :)
Jak widać, nic trudnego. Pewnie da się napisać to inaczej, ale ja zrobiłem tak.
I rozumiem, że tutaj sezon na zaliczenia różnych egzaminów się rozpoczął :P

program student1;

const
  TPrzedmioty : array[1..3] of string = ('Informatyka', 'Krystalografia', 'Matematyka');

type
  TDane = record
    Imie : string;
    Nazwisko : string;
    Oceny : array[1..3] of Byte;
    Przedmioty : array[1..3] of string;
    Srednia : Real;
  end;

const
  Studenci : array[1..5] of TDane = (
    (Imie : 'Adam'; Nazwisko : 'Kowalski'; Oceny : (5, 3, 2)),
    (Imie : 'Jan'; Nazwisko : 'Iksinski'; Oceny : (4, 5, 4)),
    (Imie : 'Zenon'; Nazwisko : 'Kuter'; Oceny : (3, 3, 5)),
    (Imie : 'Pawel'; Nazwisko : 'Tarko'; Oceny : (4, 4, 2)),
    (Imie : 'Darek'; Nazwisko : 'Adamczyk'; Oceny : (6, 6, 6))
    );
var
  Max : Real;
  I, J : integer;
begin
  Max := 0;
  for I := Low(Studenci) to High(Studenci) do
    for J := Low(Studenci[I].Przedmioty) to High(Studenci[I].Przedmioty) do
    begin
      Studenci[I].Srednia := 0;
      Studenci[I].Przedmioty[J] := TPrzedmioty[J];
    end;
  for I := Low(Studenci) to High(Studenci) do
    for J := Low(Studenci[I].Przedmioty) to High(Studenci[I].Przedmioty) do
    begin
      Studenci[I].Srednia := Studenci[I].Srednia + Studenci[I].Oceny[J];
      if J = High(Studenci[I].Oceny) then
      begin
        Studenci[I].Srednia := Studenci[I].Srednia / SizeOf(Studenci[I].Oceny);
        if Studenci[I].Srednia > Max then
          Max := Studenci[I].Srednia;
      end;
    end;
  Writeln('*** STUDENCI Z NAJWYZSZA SREDNIA ***');
  for I := Low(Studenci) to High(Studenci) do
  begin
    if Studenci[I].Srednia = Max then
      Writeln('Student: ', Studenci[I].Imie, ' ', Studenci[I].Nazwisko,
        ' - Srednia: ', Studenci[I].Srednia : 0 : 2);
  end;
  Readln;
end.
0

"I rozumiem, że tutaj sezon na zaliczenia różnych egzaminów
się rozpoczął :P"
hehe dokladnie i wielkie dzieki przynajmniej to mam z glowy :P
a mam takie pytanie podczas kompilacji wywala mi jeszcze blad:

"Some field coming after "Oceny" weren't initialized"
ocb? jak to poprawic moge?

0

Pewnie używasz FPC, a z nim nie mam doświadczenia.
Jednak żeby taki błąd nie wystapił to chyba musiałbyś
albo użyć dyrektywy kompilatora ignorującej ten błąd,
o ile takowa istnieje, albo zainicjowac pozostałe pola
rekordu w deklaracji Studenci - tak mi się wydaje ;/

1 użytkowników online, w tym zalogowanych: 0, gości: 1