Wątek przeniesiony 2018-05-06 21:31 z Delphi i Pascal przez furious programming.

Prosty program na informatyke

0

Witam, pomoze ktos napisac program? Ma on na celu wypisać osoby ktore sa wysokie np ponad 180cm. Mam uzyc rekordow,for a zaczalem to tak

program Project1;
uses crt;
const liczbaOsob=5;
const wysoki=180;
  type
  Dane=record
  imie:string[20];
  nazwisko:string[30];
  Wzrost:integer;
  end;
var
grupa:array[1..LiczbaOsob] of Dane;
I:integer;
begin
Writeln('Wprowadz Dane osob');
for i:=1 to LiczbaOsob do
begin
write('Podaj imie osoby(',I,'):');
readln(grupa[i].imie);
write('Podaj nazwisko osoby(',I,'):');
readln(grupa[i].nazwisko);
write('Podaj wzrost osoby(',I,'):');
readln(grupa[i].wzrost);
end;

Jestem zielony w tym temacie, prosze o pomoc, dziekuje :)

1

No – jeśli to oczywiście działa – to brakuje ci jeszcze drugiej pętli for oraz w niej instrukcji warunkowej, która sprawdza, czy wzrost w rekordzie nr i jest większy niż te przykładowe 180cm.

Coś jak (pseudokod):

for i from 1 to liczba osób {
    if grupa[i].wzrost >= 180 {
        write grupa[i].imie + " " + grupa[i].nazwisko + ", " + grupa[i].wzrost + "cm"
    }
}

Spróbuj ubrać to we wdzianko Pascala. :)

0

Dla starego Pascala:

var
  Grupa: array [1 .. LiczbaOsob] of Dane;
  I: Integer;
begin
  for I := 1 to LiczbaOsob do
    if Grupa[I].Wzrost >= Wysoki then
      WriteLn(Grupa[I].Imie, ' ', Grupa[I].Nazwisko {..});

Dla Free Pascala/Delphi:

var
  Grupa: array [1 .. LiczbaOsob] of Dane;
  Osoba: Dane;
begin
  for Osoba in Grupa do
    if Osoba.Wzrost >= Wysoki then
      WriteLn(Osoba.Imie, ' ', Osoba.Nazwisko {..});
0

@Silv: Dzieki za pomoc, zrobilem to tak:

program Project1;
uses crt;
const liczbaOsob=3;
const wysoki=180;
  type
  Dane=record
  imie:string[200];
  nazwisko:string[200];
  Wzrost:integer;
  end;
var
grupa:array[1..LiczbaOsob] of Dane;
I:integer;
begin
Writeln('Osoby ktore sa wysokie maja ponad 180cm wzrostu.');
Writeln('Wprowadz Dane osobowe.');
for i:=1 to LiczbaOsob do
begin
write('Podaj imie osoby(',I,'):');
readln(grupa[i].imie);
write('Podaj nazwisko osoby(',I,'):');
readln(grupa[i].nazwisko);
write('Podaj wzrost osoby(',I,'):');
readln(grupa[i].wzrost);
end;
clrscr;
writeln('Osoby ktore sa wysokie to: ');
for i:=1 to liczbaosob do
begin
if(grupa[i].wzrost>wysoki)then
write(grupa[i].imie);
write(' ');
write(grupa[i].nazwisko);
write(' ');
end;
readln;
end. 
 

Ale cos nie dziala poniewaz wypisuje mi tez osoby ktore nie mieszcza sie w tym kryterium. Nie mam pojecia jak to naprawic :(

@furious programming: Dziekuje za pomoc :) A mam jeszcze pytanie, poniewaz chce tez aby wyskoczyl komunikat, taki ze np. ' w tej grupie nie ma wyskoich osob' i jezeli dokleje to do tej drugiej petli for to ten komunikat mi sie duplikuje, mozna temu zaradzic?

uzylem intstrukcji opuszczenia :) dziekuje za pomoc :)

0
Mateusz19921 napisał(a):

uzylem intstrukcji opuszczenia :)

Nie znam takiej instrukcji…


Jeśli chcesz wiedzieć, czy w danej grupie są wysokie osoby, to musisz w pętli sprawdzać każdy element tablicy i jeśli wzrost jest większy lub równy 180 to inkrementować licznik. Po zakończeniu pętli, jeśli licznik zawiera wartość 0, to znaczy, że nie ma wysokich osób w danej grupie.

Przykład dla Free Pascala:

var
  Grupa: array [1 .. LiczbaOsob] of Dane;
  Osoba: Dane;
  Wysokich: Integer = 0;
begin
  {..}

  for Osoba in Grupa do
    if Osoba.Wzrost >= Wysoki then
    begin
      WriteLn(Osoba.Imie, ' ', Osoba.Nazwisko {..});
      Wysokich += 1;
    end;
    
  if Wysokich = 0 then
    WriteLn('W danej grupie nie ma wysokich osób!');
end;

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