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;
0

Ustaw zmienną (jakąś nową, typu int) na 0. Przejdź pętlą po wszystkich studentach i dla każdego studenta dla którego x[i].nagroda jest równe 1 zwiększ o 1 wartość tej zmiennej, wcześniej na 0 ustawionej.

0

Pewnie chodzi o ten wycinek z kawałka kodu:

if (x[z].nagroda=1) then

W pętli używasz zmiennej "C" a do sprawdzenia wartości z tablicy używasz "Z".
Coś tu chyba nie pasuje ;)

0

Sortowanie poprzez wybór będzie dla ciebie najlepsze : ) (http://www.zszychlin.hg.pl/turbopascal/algorytmy-standardowe/213-sortowanie-przez-wybor.html). 5 jest większe od 3 więc chcesz je zamienić miejscami, to musisz ruszyć cały rekord a nie wycinek.

0

dzieki zrobiłem wreszcie jednak nie było to takie trudne dzieki wszystkim:)

0

Tutaj tak wszyscy pomagają to jeszcze wrzuce taki temat : :)

Utworzyć tablicę (np. 4 elementy) Struktur zawierających imiona (tablica char) i numery telefonów (zmienna long). Przejrzeć tablicę metodą bezpośrednią (operator kropki) i pośrednią korzystając ze wskaźnika.

Program napisałem i moje pytanie to : Czy dobrze go napisałem jeżeli nie wskazać ewentualny błąd. (Nie wiem dokładnie o co chodzi z tą metodą pośrednią i bezpośrednią).
Proszę o sprawdzenie.

 
program Dziwny;
 
type
  Dane = record
    imie : array[1..16] of char;
    telefon : longint;
  end;
var
  osoby : array[1..4] of dane;
  a, b : integer;
begin
  for a := 1 to 4 do
  begin
    writeln('Osoba numer: : ', a);
    write('Imie : ');
    readln(osoby[a].imie[1..16]);
    write('telefon: ');
    readln(osoby[a].telefon);
  end;
  writeln;
  writeln('Przegladanie tablicy metoda bezposrednia:');
  writeln;
  writeln('Osoba numer 1 imie: ', osoby[1].imie, 'telefon: ', osoby[1].telefon);
  writeln('Osoba numer 2 imie: ', osoby[2].imie, 'telefon: ', osoby[2].telefon);
  writeln('Osoba numer 3 imie: ', osoby[3].imie, 'telefon: ', osoby[3].telefon);
  writeln('Osoba numer 4 imie: ', osoby[4].imie, 'telefon: ', osoby[4].telefon);
  writeln;
  writeln('Przegladanie tablicy metoda posrednia: ');
  writeln;
  write('Podaj numer osoby ktorej dane chcesz zobaczyc: '); read(a);
  writeln('Osoba numer: ', a);
  writeln('imie: ', osoby[a].imie[1..16]);
  writeln('telefon: ', osoby[a].telefon);
  writeln;
end.
1

Ja Cię zatłukę... :) Użyjesz w końcu wskaźnika czy nie?

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