Algorytm " Flaga Polska"

0

Witam mam zadanie :
Dana jest tablica n (n>1) rekordów postaci:
Imie – zawiera imię studenta,
Nazwisko – nazwisko studenta
Nagroda – informacja o przyznanej nagrodzie (1 – tak, 0- brak)
Napisać algorytm, w którym tablica zostanie posortowana w ten sposób, że na początku znajdą się
studenci, którzy nie otrzymali nagrody a następnie studenci, którzy nagrodę otrzymali.
Na ekranie powinny być wyświetlone imiona i nazwiska studentów którzy nie otrzymali nagrody,
a następnie informacje o osobach, które otrzymały nagrodę.
Wskazówka. Zastosować sortowanie „flagą polską”.

i nie wiem co dalej co z tą flagą polską bardzo proszę o napisanie programu


type 
student = record
imie:string[20];
nazwisko:string[20];
nagroda:byte;
end;

tab=array[1..50] of student;

var
n:integer;
x:tab;
s:student;

begin
repeat
writeln('Podaj liczbe studentow:');  readln(n);

for z:=1 to n do

begin
write('imie: ');                     readln(x[z].imie);
write('nazwisko: ');              readln(x[z].nazwisko);
write('nagroda: ');               readln(x[z].nagroda);
end;       
0

bardzo proszę o napisanie programu

Z takim tekstem, to do działu Praca.
My możemy co najwyżej pomóc.

0

proszę o pomoc:) w napisaniu programu

0
hiob21 napisał(a)

Zastosować sortowanie „flagą polską”.

Co to w ogóle za sortowanie? To jakiś slang programistyczny czy co? Nawet google nie bardzo wie, co to;

Jedyne co znalazłem odnośnie sortowania flagą polską to taki kawałek kodu:

writeln; 

for i:=1 to nn do 
writeln (' student ', tab[i].nazwisko , ' status to ', 
tab[i].spelnilo); 
writeln; 
writeln ('To samo - tylko sortowanie flaga polska'); 
writeln;
i:=1; 
j:=nn; 
while i<j do 
begin 

  while (tab[i].spelnilo='n') and (i<nn) do i:=i+1; 

 while (tab[i].spelnilo='t') and (j>1) do   j:=j-1; 

 if j>i then 
  begin 
  c:=tab[i]; 
  tab[i]:=tab[j]; 
  tab[j]:=c; 
 end; 
  i:=i+1; 
  j:=j-1; 

  end; 

for i:=1 to nn do 
writeln (tab [i].nazwisko, ' (dostanie / niedostanie) ', ' (', 
tab[i].spelnilo,')');

Źródło: www.pastie.org/1478829/wrap

Obejrzyj.

0
hiob21 napisał(a)

i nie wiem co dalej co z tą flagą polską bardzo proszę o napisanie programu

hiob21 napisał(a)

proszę o pomoc:) w napisaniu programu

REGULAMIN napisał(a)

Zabronione jest umieszczanie w postach prośby o rozwiązanie zadań domowych, zadań zaliczeniowych. Lenistwo nie jest tolerowane. Można poprosić o rozwiązanie konkretnego problemu, a nie całego zadania, paru zadań.

Brak samodzielnej pracy, jak na razie temat się nadaje do kosza...

0

Dobra cały dzien siedziałem i prawie doszedłem wreszcie: Program ma posortować w taki sposób że najpierw będą zera(brak nagrody) a potem jedynki(jest nagroda). Mój program to robi to znaczy sortuje ale tylko tyczy sie to nagród pozostałe dane studenta nie sortują się(imie i nazwisko pozostaje tak jak było :( ) prosze o rozwiązanie tego problemu aby
wraz z nagrodami sortował sie cały record .
tu jest kod:

type 
student = record
imie:string[20];
nazwisko:string[20]; 
nagroda:byte;
end;

tab=array[1..50] of student;

var
z,n,i,j,p:integer;
x:tab;

begin
repeat
writeln('Podaj liczbe studentow:');  readln(n);
 until (n>1);
for z:=1 to n do

begin
write('imie: ');                                                           readln(x[z].imie);
write('nazwisko: ');                                                       readln(x[z].nazwisko);
write('Czy otrzymal nagrode??? 0-nie  1-tak: ');  readln(x[z].nagroda);
end;

i:=1;
j:=n;
while(i<j) do begin

      while ((x[i].nagroda=0) and (i<n)) do begin
      i:=i+1;
      end;

      while ((x[j].nagroda=1) and (j>1)) do begin
      j:=j-1;
      end;

      if (j>i) then
      begin
      p:=x[i].nagroda;
      x[i].nagroda:=x[j].nagroda;
      x[j].nagroda:=p;
      end;

      i:=i+1;
      j:=j-1;
end;

writeln;
for z:=1 to n do begin
writeln(x[z].nagroda,',',x[z].imie,',',x[z].nazwisko);
end;
end.      
0

Wykonujesz zamianę elementów x[i].nagroda i x[j].nagroda, a powinieneś zamieniać ze sobą całe rekordy x[i] oraz x[j].

0

ale gdy robię:


 x[i].student i x[j].student

to wyskakuje mi błąd kompilacji

0

Wyskakuje, bo takie coś nie istnieje.
Rób zamianę pomiędzy x[i] i x[j], a nie żadnych ich elementów potomnych. Zmienna tymczasowa tez musi być typu student.

p := x[i];
x[i] := x[j];
x[j] := p;

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