Analiza ankiety (pascal)

0

Witam wszystkich ma takie zadanie:

Wytwórnia fonograficzna organizuje ankietę w celu oceny powodzenia swoich produktów na rynku i zorganizowania parady przebojów. Osoby biorące udział w ankiecie mają być podzielone na cztery grupy w zależności od płci i wieku (np., osoby do 20 roku życia i powyżej). Każda osoba podaje pięć tytułów z listy przebojów. Przeboje na liście oznaczone są liczbami od 1 do P (załóżmy, że P =11).

  • określić strukturę danych reprezentującą jednego respondenta i zawierającą jego nazwisko, imię, płeć, wiek i pięć wybranych przebojów zgodnie z priorytetem.

  • opracować aplikację, która umożliwi przeprowadzenie analizy wyników badania ankietowego.

Dane: N – liczba osób biorących udział w badaniu ankietowym,

odpowiedzi kolejnych respondentów - wyniki ankiety.

Wyniki: Cztery oddzielne listy (dla każdej kategorii respondentów), którzy na pierwszym miejscu wymienili jeden z trzech najpopularniejszych przebojów.

Więc tak... zrobiłam program który wypisuje te cztery grupy , (rozróżnia płeć i wiek) i wypisuje 5 utworów które wybrała dana osoba. I teraz mam problem bo nie wiem w ogóle jak zrobić aby program zrobi analize tej ankiety i wyliczył które utwory są najpopularniejsze, męcze się z tym już od paru dni. Bardzo proszę was o pomoc.

oto mój kod

 

Program Osoby;

type
osoba=record
imie:string;
ostatnialitera:string[1]; 
plec:string;
wiek:integer;  
grupa:integer;    
wybor1,wybor2,wybor3,wybor4,wybor5:integer; 
utwor1,utwor2,utwor3,utwor4,utwor5:string;
end;
 
tab = array of osoba;
 
var
x:tab;
n,i,j,q,m,c1,c2,c3,c4,c5:integer;
biezacaGrupa:integer;
r,h,b1,b2,b3,b4,b5:string;

begin
writeln('Ile jest osob???');  readln(n);
SetLength(x,n);

for i:=1 to n do
 
begin
writeln;
writeln('Osoba nr ',i,': ');
write('Imie: ');  readln(x[i].imie);
write('wiek: ');  readln(x[i].wiek);

x[i].ostatnialitera := Copy(x[i].imie,Length(x[i].imie),1);  
   if ((x[i].ostatnialitera='a') or (x[i].ostatnialitera='A')) then
     x[i].plec:='kobieta'
         else
     x[i].plec:='mezczyzna';
   
   if ((x[i].plec='kobieta') and (x[i].wiek<=20)) then
     x[i].grupa:=1;
   if ((x[i].plec='kobieta') and (x[i].wiek>20)) then
     x[i].grupa:=2;
   if ((x[i].plec='mezczyzna') and (x[i].wiek<=20)) then
         x[i].grupa:=3;
   if ((x[i].plec='mezczyzna') and (x[i].wiek>20)) then
         x[i].grupa:=4;
 writeln;
 writeln('Podaj 5 najlepszych wedlug ciebie utworow (wedlug priorytetu)');
 writeln;
 writeln('1-  Peja - cicha noc');
 writeln('2-  Toto - hold the line');
 writeln('3-  John Lenon - imagine'); 
 writeln('4-  Cutting Crew - I Just Died in your arms tonight');
 writeln('5-  Tiesto - show me a way');
 writeln('6-  O.S.T.R - Kochana Polsko');
 writeln('7-  Murrray Head-One night in Bangkok');
 writeln('8-  Tupac - California Love'); 
 writeln('9-  Tupac - Geto gospel');
 writeln('10- ABBA - Knowing me knowing you');
 writeln('11- Metalica - Brothers in Army ');
 writeln;
 
 write('Wybor pierwszy: ');
 readln(x[i].wybor1);
 write('Wybor drugi: ');
 readln(x[i].wybor2);
 write('Wybor trzeci: ');
 readln(x[i].wybor3);
 write('Wybor czwarty: ');
 readln(x[i].wybor4);
 write('Wybor piaty: ');
 readln(x[i].wybor5);
 
if x[i].wybor1 = 1 then x[i].utwor1:='Peja - cicha noc';
if x[i].wybor1 = 2 then x[i].utwor1:='Toto - hold the line';
if x[i].wybor1 = 3 then x[i].utwor1:='John Lenon - imagine';
if x[i].wybor1 = 4 then x[i].utwor1:='Cutting Crew - I Just Died in your arms tonight';
if x[i].wybor1 = 5 then x[i].utwor1:='Tiesto - show me a way';
if x[i].wybor1 = 6 then x[i].utwor1:='O.S.T.R - Kochana Polsko';
if x[i].wybor1 = 7 then x[i].utwor1:='Murrray Head-One night in Bangkok';
if x[i].wybor1 = 8 then x[i].utwor1:='Tupac - California Love';
if x[i].wybor1 = 9 then x[i].utwor1:='Tupac - Geto gospel';
if x[i].wybor1 = 10 then x[i].utwor1:='ABBA - Knowing me knowing you';
if x[i].wybor1 = 11 then x[i].utwor1:='Metalica - Brothers in Army';

if x[i].wybor2 = 1 then x[i].utwor2:='Peja - cicha noc';
if x[i].wybor2 = 2 then x[i].utwor2:='Toto - hold the line';
if x[i].wybor2 = 3 then x[i].utwor2:='John Lenon - imagine';
if x[i].wybor2 = 4 then x[i].utwor2:='Cutting Crew - I Just Died in your arms tonight';
if x[i].wybor2 = 5 then x[i].utwor2:='Tiesto - show me a way';
if x[i].wybor2 = 6 then x[i].utwor2:='O.S.T.R - Kochana Polsko';
if x[i].wybor2 = 7 then x[i].utwor2:='Murrray Head-One night in Bangkok';
if x[i].wybor2 = 8 then x[i].utwor2:='Tupac - California Love';
if x[i].wybor2 = 9 then x[i].utwor2:='Tupac - Geto gospel';
if x[i].wybor2 = 10 then x[i].utwor2:='ABBA - Knowing me knowing you';
if x[i].wybor2 = 11 then x[i].utwor2:='Metalica - Brothers in Army';

if x[i].wybor3 = 1 then x[i].utwor3:='Peja - cicha noc';
if x[i].wybor3 = 2 then x[i].utwor3:='Toto - hold the line';
if x[i].wybor3 = 3 then x[i].utwor3:='John Lenon - imagine';
if x[i].wybor3 = 4 then x[i].utwor3:='Cutting Crew - I Just Died in your arms tonight';
if x[i].wybor3 = 5 then x[i].utwor3:='Tiesto - show me a way';
if x[i].wybor3 = 6 then x[i].utwor3:='O.S.T.R - Kochana Polsko';
if x[i].wybor3 = 7 then x[i].utwor3:='Murrray Head-One night in Bangkok';
if x[i].wybor3 = 8 then x[i].utwor3:='Tupac - California Love';
if x[i].wybor3 = 9 then x[i].utwor3:='Tupac - Geto gospel';
if x[i].wybor3 = 10 then x[i].utwor3:='ABBA - Knowing me knowing you';
if x[i].wybor3 = 11 then x[i].utwor3:='Metalica - Brothers in Army';

if x[i].wybor4 = 1 then x[i].utwor4:='Peja - cicha noc';
if x[i].wybor4 = 2 then x[i].utwor4:='Toto - hold the line';
if x[i].wybor4 = 3 then x[i].utwor4:='John Lenon - imagine';
if x[i].wybor4 = 4 then x[i].utwor4:='Cutting Crew - I Just Died in your arms tonight';
if x[i].wybor4 = 5 then x[i].utwor4:='Tiesto - show me a way';
if x[i].wybor4 = 6 then x[i].utwor4:='O.S.T.R - Kochana Polsko';
if x[i].wybor4 = 7 then x[i].utwor4:='Murrray Head-One night in Bangkok';
if x[i].wybor4 = 8 then x[i].utwor4:='Tupac - California Love';
if x[i].wybor4 = 9 then x[i].utwor4:='Tupac - Geto gospel';
if x[i].wybor4 = 10 then x[i].utwor4:='ABBA - Knowing me knowing you';
if x[i].wybor4 = 11 then x[i].utwor4:='Metalica - Brothers in Army';

if x[i].wybor5 = 1 then x[i].utwor5:='Peja - cicha noc';
if x[i].wybor5 = 2 then x[i].utwor5:='Toto - hold the line';
if x[i].wybor5 = 3 then x[i].utwor5:='John Lenon - imagine';
if x[i].wybor5 = 4 then x[i].utwor5:='Cutting Crew - I Just Died in your arms tonight';
if x[i].wybor5 = 5 then x[i].utwor5:='Tiesto - show me a way';
if x[i].wybor5 = 6 then x[i].utwor5:='O.S.T.R - Kochana Polsko';
if x[i].wybor5 = 7 then x[i].utwor5:='Murrray Head-One night in Bangkok';
if x[i].wybor5 = 8 then x[i].utwor5:='Tupac - California Love';
if x[i].wybor5 = 9 then x[i].utwor5:='Tupac - Geto gospel';
if x[i].wybor5 = 10 then x[i].utwor5:='ABBA - Knowing me knowing you';
if x[i].wybor5 = 11 then x[i].utwor5:='Metalica - Brothers in Army';

writeln;
writeln('Twoj wybor: ');

writeln('Utwor Pierwszy: ',x[i].utwor1);    
writeln('Utwor Drugi: ',x[i].utwor2);
writeln('Utwor trzec: ',x[i].utwor3);
writeln('Utwor czwarty: ',x[i].utwor4);
writeln('Utwor piaty: ',x[i].utwor5); 
end;
 
{sortownie babelkowe}
 for i:=2 to n do begin
    for j:=n downto i do begin
        if x[j-1].grupa > x[j].grupa then begin
 
 
      h:=x[j-1].imie; 
      x[j-1].imie:=x[j].imie; 
      x[j].imie:=h; 
 
      m:=x[j-1].wiek;
      x[j-1].wiek:=x[j].wiek;
      x[j].wiek:=m;   
 
      r:=x[j-1].plec; 
      x[j-1].plec:=x[j].plec; 
      x[j].plec:=r; 
	  
	  
	  c1:=x[j-1].wybor1;
	  x[j-1].wybor1:=x[j].wybor1;
	  x[j].wybor1:=c1;
	  
	  c2:=x[j-1].wybor2;
	  x[j-1].wybor2:=x[j].wybor2;
	  x[j].wybor2:=c2;
	  
	  c3:=x[j-1].wybor3;
	  x[j-1].wybor3:=x[j].wybor3;
	  x[j].wybor3:=c3;
	  
	  c4:=x[j-1].wybor4;
	  x[j-1].wybor4:=x[j].wybor4;
	  x[j].wybor4:=c4;
 
      c5:=x[j-1].wybor5;
	  x[j-1].wybor5:=x[j].wybor5;
	  x[j].wybor5:=c5;
	  
	  b1:=x[j-1].utwor1;
	  x[j-1].utwor1:=x[j].utwor1;
	  x[j].utwor1:=b1;
      
	  b2:=x[j-1].utwor2;
	  x[j-1].utwor2:=x[j].utwor2;
	  x[j].utwor2:=b2;

	  b3:=x[j-1].utwor3;
	  x[j-1].utwor3:=x[j].utwor3;
	  x[j].utwor3:=b3;

      b4:=x[j-1].utwor4;
	  x[j-1].utwor4:=x[j].utwor4;
	  x[j].utwor4:=b4;

	  b5:=x[j-1].utwor5;
	  x[j-1].utwor5:=x[j].utwor5;
	  x[j].utwor5:=b5;

	  
	  q := x[j-1].grupa;
      x[j-1].grupa := x[j].grupa;
      x[j].grupa := q;
                     end;
                                       end;
writeln;
 
end;
{koniec sortowania}
  
  writeln('Grupa ',x[1].grupa);
  writeln;
  biezacaGrupa := x[1].grupa;
  
  for i := 1 to High(x)+1 do
  begin
   
    if biezacaGrupa <> x[i].grupa then
      begin
        biezacaGrupa := x[i].grupa;
        writeln;
        writeln('Grupa ',x[i].grupa);
        writeln;
      end;
      writeln('Osoba : ');
      writeln('imie: ',x[i].imie);
      writeln('wiek: ',x[i].wiek);
	  writeln('plec: ',x[i].plec);
	  writeln('Utwor Pierwszy: ',x[i].utwor1);    
      writeln('Utwor Drugi: ',x[i].utwor2);
      writeln('Utwor trzec: ',x[i].utwor3);
      writeln('Utwor czwarty: ',x[i].utwor4);
      writeln('Utwor piaty: ',x[i].utwor5); 
      writeln;
  end;
  
 
 end.

0

Bardzo proszę o pomoc naprawdę nie wiem co dalej z tym zadaniem...

0

Ola21, niestety program nie działa dobrze, chociaż się kompiluje.

Najpoważniejszy błąd popełniłaś tutaj:

writeln('Ile jest osob???');
readln(n);
SetLength(x,n);
for i:=1 to n do

Tablice dynamiczne są indeksowane od zera, więc pętla musi przebiegać od 0 do n-1
Prawdopodobnie będziesz także musiała zmienić indeksy pętli w sortowaniu bąbelkowym. Nie analizowałem algorytmu sortującego, bo jak widzę w kodzie dziesiątki zmiennych nazwanych jedną literą, to mi się odechciewa (zresztą ja i tak nie lubię analizować czyichś kodów).

Jeszcze odniosę się do faktu, ze w kodzie powtarzasz nazwę każdego utworu aż 6 razy... a przecież nożna tak:

const
  Utwory: array[1..11] of string =
   ('Peja - cicha noc',
    'Toto - hold the line',
    'John Lenon - imagine',
    'Cutting Crew - I Just Died in your arms tonight',
    'Tiesto - show me a way',
    'O.S.T.R - Kochana Polsko',
    'Murrray Head - One night in Bangkok',
    'Tupac - California Love',
    'Tupac - Geto gospel',
    'ABBA - Knowing me knowing you',
    'Metalica - Brothers in Army');
{ ... }
writeln('Podaj 5 najlepszych wedlug ciebie utworow (wedlug priorytetu)');
for i:= 1 to 11 do writeln(i, ' - ', Utwory[i]);
{ ... }
x[i].utwor1:= Utwory[x[i].wybor1];
x[i].utwor2:= Utwory[x[i].wybor2];
x[i].utwor3:= Utwory[x[i].wybor3];
x[i].utwor4:= Utwory[x[i].wybor4];
x[i].utwor5:= Utwory[x[i].wybor5];

Zamiast 55 linijek z warunkiem if zostało tylko 5, a i te można skrócić do jednej linijki, gdyby zastosować tablicę

To na razie tyle, dalej próbuj sama i ew. pytaj

0

ok to wszędzie będzie n-1 to czaje no i rzeczywiscie można skrócić kod ale ja się pytam jak to zrobić żeby mi zrobiło tą analize... napisało który utwór jest najbardziej popularny...

0

Proszę tu jest skrócony kod oraz oblicza on ilosc głosów utworu oraz pisze 3 utwory które mają najwięcej głosów. Ale jak zrobić jezeli kilka utworów ma największą liczbe głosów(taką samą)??? (chce aby program napisał : 1 miejsce {lista utworów które mają największą taką samą ilość głosów } 2 miejsce {lista utworów które mają na 2 miejscu największą taką samą ilość głosów} 3 miejsce {lista utworów które mają na 3 miejscu największą taką samą ilość głosów } )

proszę o pomoc oto kodzik:

 

program osopy;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TPopular = record
    Glosy : Integer;
    Index : Integer;
  end;
  
  
  type
  TPerson = record
    Imie, Plec     : String;
    OstatniaLitera : Char;
    Wiek, Grupa    : Integer;

    Wybory         : array [1..5] of Integer;
    Utwory         : array [1..5] of String;
  end;

var
  Osoby : array of TPerson;
  IloscOsob, I, J, K,f,g,h,KA,q,w,t,AktualnaGrupa :Integer;
   Max : array [1..3] of TPopular;
      IloscGlosow : array [1..11] of Integer;

  Tytuly : array [1..11] of String =
  (
    ('Peja - Cicha Noc'),
    ('Toto - Hold The Line'),
    ('John Lenon - Imagine'),
    ('Cutting Crew - I Just Died in your arms tonight'),
    ('Tiesto - Show Me A Way'),
    ('O.S.T.R - Kochana Polsko'),
    ('Murrray Head - One Night in Bangkok'),
    ('Tupac - California Love'),
    ('Tupac - Geto gospel'),
    ('ABBA - Knowing Me Knowing You'),
    ('Metalica - Brothers in Army ')
  );

procedure ReplaceStrings(var S1, S2: String);
var Temp: String;
begin
  Temp := S1;
  S1 := S2;
  S2 := Temp;
end;

procedure ReplaceIntegers(var I1, I2: Integer);
var Temp: Integer;
begin
  Temp := I1;
  I1 := I2;
  I2 := Temp;
end;

begin
  Writeln('Ile jest osob???');
  Readln(IloscOsob);

  SetLength(Osoby, IloscOsob);

  for I := 0 to IloscOsob-1  do
    begin
      Writeln;
      Writeln('Osoba nr ', I+1, ': ');

      Write('Imie: ');
      Readln(Osoby[I].Imie);

      Write('Wiek: ');
      Readln(Osoby[I].Wiek);

      Osoby[I].OstatniaLitera := Osoby[I].Imie[  Length(Osoby[I].Imie)  ];

      if LowerCase(Osoby[I].OstatniaLitera) = 'a' then
         Osoby[I].Plec := 'Kobieta'
      else
         Osoby[I].Plec := 'Mezczyzna';

      if Osoby[I].Plec = 'Kobieta' then
        begin
          if Osoby[I].Wiek <= 20 then
             Osoby[I].Grupa := 0
          else
             Osoby[I].Grupa := 1;
        end
      else
        begin
          if Osoby[I].Wiek <= 20 then
             Osoby[I].Grupa := 2
          else
             Osoby[I].Grupa := 3;
        end;

      writeln;
      writeln('Podaj 5 najlepszych wedlug ciebie utworow (wedlug priorytetu)', #13);

      for K := Low(Tytuly) to High(Tytuly) do
        Writeln(K, '  --  ', Tytuly[K]);


      for K := 1 to 5 do
        begin
          Write('Wybor ', K, ': ');
          Readln(Osoby[I].Wybory[K]);
        end;

      for K := 1 to 5 do
        Osoby[I].utwory[K] := Tytuly[Osoby[I].Wybory[K]];

      Writeln;
      Writeln('Twoj wybor: ');
      Writeln('Utwor Pierwszy: ', Osoby[I].Utwory[1]);
      Writeln('Utwor Drugi: ',    Osoby[I].Utwory[2]);
      Writeln('Utwor trzeci: ',   Osoby[I].Utwory[3]);
      Writeln('Utwor czwarty: ',  Osoby[I].Utwory[4]);
      Writeln('Utwor piaty: ',    Osoby[I].Utwory[5]);
    end;

{sortownie babelkowe}
  for I := 1 to IloscOsob-1 do
    begin
      for J := IloscOsob downto I do
        begin

          if Osoby[J - 1].Grupa > Osoby[J].grupa then
            begin
              ReplaceStrings(Osoby[J - 1].Imie,  Osoby[J].Imie);
              ReplaceStrings(Osoby[J - 1].Plec,  Osoby[J].Plec);

              ReplaceIntegers(Osoby[J - 1].Wiek,  Osoby[J].Wiek);
              ReplaceIntegers(Osoby[J - 1].Grupa, Osoby[j].Grupa);

              for K := 1 to 5 do
                ReplaceIntegers(Osoby[J - 1].Wybory[K], Osoby[J].Wybory[K]);

              for K := 1 to 5 do
                ReplaceStrings(Osoby[J - 1].Utwory[K], Osoby[J].Utwory[K]);
            end;

        end;
      Writeln;
    end;
{koniec sortowania}
 writeln;
Writeln('Grupa ', Osoby[0].Grupa+1);
writeln('-------------------------------------------------');

  AktualnaGrupa := Osoby[0].Grupa;

  for I := 0 to High(Osoby)  do
    begin

      if AktualnaGrupa <> Osoby[i].Grupa then
        begin
          AktualnaGrupa := Osoby[i].Grupa;
          writeln('---------------------------------------');
          writeln;
          Writeln('Grupa ', Osoby[i].Grupa+1);
          writeln('---------------------------------------');
          Writeln;
        end;
      Writeln('Osoba : ');
      Writeln('Imie: ',           Osoby[I].Imie);
      Writeln('Wiek: ',           Osoby[I].Wiek);
      writeln('Plec: ',           Osoby[I].Plec);

      writeln('Utwor Pierwszy: ', Osoby[I].utwory[1]);
      writeln('Utwor Drugi: ',    Osoby[I].utwory[2]);
      writeln('Utwor trzec: ',    Osoby[I].utwory[3]);
      writeln('Utwor czwarty: ',  Osoby[I].utwory[4]);
      writeln('Utwor piaty: ',    Osoby[I].utwory[5]);
      writeln;

    end;


    begin
 for f := Low(Osoby) to High(Osoby) do
    for g := 1 to 5 do
      begin
        K := Osoby[f].Wybory[g];
        IloscGlosow[K] := IloscGlosow[K] + 1;
      end;


    for t:=1 to 11 do
 writeln(Tytuly[t],' Ilosc glosow: ',IloscGlosow[t]);
 writeln
 

end;

begin

  for q := 1 to 3 do
    begin
      for w := 1 to 11 do
        if IloscGlosow[w] > Max[q].Glosy then
          begin
            Max[q].Glosy := IloscGlosow[w];
            IloscGlosow[w] := 0;
          end;
    end;

  for I := 1 to 3 do
    Writeln(I, ' miejsce:    ',tytuly[I],' Liczba Glosow: ',Tytuly[Max[I].Index], ' ', Max[I].Glosy);

end;




{ TODO -oUser -cConsole Main : Insert code here }
readln;
end.

0

Z tablicy, w której masz informację o ilości głosów na dany utwór, wyznaczasz 3 największe liczby.
Czyli:

Utwór  1  2  3  4  5  6  7  8  9 10 11
Głosy  5  2  1  0  0  3  6  4  2  3  5

Max[0] = 6 (1)
Max[1] = 5 (2)
Max[2] = 4 (1)

Szukając Max[0], szukasz Max z tych głosów. Gdy to będzie Max[1], szukasz Max < Max[0] itd.
A potem już z górki pętelka z if-em lub case-m.

0

Acha jeszcze i jak zrobić aby wyswietlały mi się tytuł trzech najbardziej popularnych?????(w kodzie który wkleiłam wyżej nie pokazują mi się)

Proszę o pomoc jak zrobić aby wyswietliło mi tytuły 3 najpopularniejszych piosenek bo jak ja robie to albo wyswietla wszystkie takie same albo się nie kompiluje:(

0

Dobrze juz zrobiłam al dzięki wam. Ale mam jeszcze jeden mały bład więc prosszę o pmoc. Jezeli Zrobię dane np: dla 4 osób w ten sposób:
osoba1) utwory: 1,2,3,4,5
osoba2) utwory: 4,5,6,7,8
osoba3) utwory 5,8,9,11,10
osoba4) utwory 5,4,8,1,10

to wtedy program wypisuje trzy najpopularniejsze utwory w ten sposób:

1 utwór .... głosy:4
2 utwór .... głosy:3
3 utwór .... głosy:2

a przeciez dwa utwory mają 3 glosy więc powinien napisac:

1 utwór .... głosy:4
2 utwór .... głosy:3
3 utwór .... głosy:3

Gdzie tu jest błąd co jest nie tak proszę pomocy

kod:


program jakis;
  
{$APPTYPE CONSOLE} 
  
uses
  SysUtils;

type
  Popularnosc = record
    Glosy : Integer;
    Index : Integer;
  end; 
  
  
  type 
  Osobowosc = record 
    Imie,nazwisko, Plec: String;
    OstatniaLitera : Char; 
    Wiek, Grupa    : Integer; 
  
    Wybory         : array [1..5] of Integer; 
    Utwory         : array [1..5] of String; 
  end; 
  
var 
  Osoby : array of Osobowosc;
  IloscOsob, I, J, K,f,g,h,KA,q,w,t,AktualnaGrupa,U :Integer; 
   Max : array [1..3] of Popularnosc; 
      IloscGlosow : array [1..20] of Integer;
  
  Tytuly : array [1..20] of String =
  (
    ('Peja - Cicha Noc'),
    ('Toto - Hold The Line'),
    ('John Lenon - Imagine'),
    ('Cutting Crew - I Just Died in your arms tonight'),
    ('Tiesto - Show Me A Way'),
    ('O.S.T.R - Kochana Polsko'),
    ('Murrray Head - One Night in Bangkok'),
    ('Tupac - California Love'),
    ('Tupac - Geto gospel'),
    ('ABBA - Knowing Me Knowing You'),
    ('Bob Marley - Buffalo soliders '),
    ('Metalica - Brothers in Army '),
    ('Karamba - Jedziemy po ziolo '),
    ('Lzy - Wiem ze jestes tam '),
    ('Mieczyslaw Fogg - Ta ostatnia Niedziela '),
    ('Boys - Jestes szalona '),
    ('Doda - Szansa '),
    ('Oddzial zamkniety - Gandzia '),
    ('Eminem - you dont now '),
    ('Ryszard Rynkowski - Szczesliwej Drogi Juz Czas ')

  );

procedure Przypisanie(var S1, S2: String);
var Temp: String;
begin
  Temp := S1;
  S1 := S2;
  S2 := Temp;
end; 
  
procedure Przypisanie2(var I1, I2: Integer);
var Temp: Integer;
begin
  Temp := I1;
  I1 := I2;
  I2 := Temp;
end;

begin
  Writeln('Ile jest osob???');
  Readln(IloscOsob);

  SetLength(Osoby, IloscOsob);

  for I := 0 to IloscOsob-1  do
    begin
      Writeln;
      Writeln('Osoba nr ', I+1, ': ');


        Write('Nazwisko: ');
      Readln(Osoby[I].nazwisko);


      Write('Imie: ');
      Readln(Osoby[I].Imie);






      Write('Wiek: ');
      Readln(Osoby[I].Wiek);

      Osoby[I].OstatniaLitera := Osoby[I].Imie[  Length(Osoby[I].Imie)  ];

      if LowerCase(Osoby[I].OstatniaLitera) = 'a' then
         Osoby[I].Plec := 'Kobieta'
      else
         Osoby[I].Plec := 'Mezczyzna';

      if Osoby[I].Plec = 'Kobieta' then
        begin
          if Osoby[I].Wiek <= 20 then
             Osoby[I].Grupa := 0
          else
             Osoby[I].Grupa := 1;
        end
      else
        begin
          if Osoby[I].Wiek <= 20 then
             Osoby[I].Grupa := 2
          else
             Osoby[I].Grupa := 3;
        end;

      writeln;
      writeln('Podaj 5 najlepszych wedlug ciebie utworow (wedlug priorytetu)', #13);

      for K := 1 to 20 do
        Writeln(K, '  --  ', Tytuly[K]);
  
  
      for K := 1 to 5 do 
        begin 
          Write('Wybor ', K, ': '); 
          Readln(Osoby[I].Wybory[K]); 
        end; 
  
      for K := 1 to 5 do 
        Osoby[I].utwory[K] := Tytuly[Osoby[I].Wybory[K]]; 
  
      Writeln; 
      Writeln('Twoj wybor: '); 
      Writeln('Utwor Pierwszy: ', Osoby[I].Utwory[1]);
      Writeln('Utwor Drugi: ',    Osoby[I].Utwory[2]); 
      Writeln('Utwor trzeci: ',   Osoby[I].Utwory[3]); 
      Writeln('Utwor czwarty: ',  Osoby[I].Utwory[4]); 
      Writeln('Utwor piaty: ',    Osoby[I].Utwory[5]); 
    end; 
  
{sortownie babelkowe} 
  for I := 1 to IloscOsob-1 do 
    begin 
      for J := IloscOsob downto I do 
        begin 
  
          if Osoby[J - 1].Grupa > Osoby[J].grupa then 
            begin 

               przypisanie(Osoby[J - 1].nazwisko,  Osoby[J].nazwisko);
               przypisanie(Osoby[J - 1].Imie,  Osoby[J].Imie);
               przypisanie(Osoby[J - 1].Plec,  Osoby[J].Plec);
  
              przypisanie2(Osoby[J - 1].Wiek,  Osoby[J].Wiek);
              przypisanie2(Osoby[J - 1].Grupa, Osoby[j].Grupa);
  
              for K := 1 to 5 do 
                przypisanie2(Osoby[J - 1].Wybory[K], Osoby[J].Wybory[K]);
  
              for K := 1 to 5 do 
                przypisanie(Osoby[J - 1].Utwory[K], Osoby[J].Utwory[K]);
            end; 
  
        end; 
      Writeln; 
    end; 
{koniec sortowania} 
 writeln; 
Writeln('Grupa ', Osoby[0].Grupa+1); 
writeln('-------------------------------------------------'); 
  
  AktualnaGrupa := Osoby[0].Grupa; 
  
  for I := 0 to IloscOsob-1  do
    begin 
  
      if AktualnaGrupa <> Osoby[i].Grupa then 
        begin 
          AktualnaGrupa := Osoby[i].Grupa; 
          writeln('---------------------------------------'); 
          writeln; 
          Writeln('Grupa ', Osoby[i].Grupa+1);
          writeln('---------------------------------------'); 
          Writeln; 
        end; 
      Writeln('Osoba : ');
      Writeln('Nazwisko: ',       Osoby[I].Nazwisko);
      Writeln('Imie: ',           Osoby[I].Imie);
      Writeln('Wiek: ',           Osoby[I].Wiek);
      writeln('Plec: ',           Osoby[I].Plec); 
  
      writeln('Utwor Pierwszy: ', Osoby[I].utwory[1]); 
      writeln('Utwor Drugi: ',    Osoby[I].utwory[2]); 
      writeln('Utwor trzec: ',    Osoby[I].utwory[3]);
      writeln('Utwor czwarty: ',  Osoby[I].utwory[4]); 
      writeln('Utwor piaty: ',    Osoby[I].utwory[5]);
      writeln;

    end;


    begin
 for f := 0 to IloscOsob-1 do
    for g := 1 to 5 do
      begin
        K := Osoby[f].Wybory[g];
        IloscGlosow[K] := IloscGlosow[K] + 1;
      end;

  writeln('..............................................');
  writeln('Utwory i ich liczba glosow:');
  writeln('..............................................');
  writeln;
    for t:=1 to 20 do
          writeln(Tytuly[t],' Ilosc glosow: ',IloscGlosow[t]);
          writeln


end;



  for Q := 1 to 3 do
    begin
      for W := 1 to 20 do
        if IloscGlosow[w] > Max[q].Glosy then
          begin
            Max[q].Glosy := IloscGlosow[W];
            Max[q].Index := W;
            IloscGlosow[w] := 0;
          end;
    end;


    writeln;
    writeln('..............................................');
    writeln('Trzy najpopularniejsze Utwory:');
    writeln('..............................................');
    writeln;

   for I := 1 to 3 do
    Writeln(I, ' Utwor: ',Tytuly[Max[I].Index], ' Liczba Glosow: ', Max[I].Glosy);

    writeln;
    writeln('.................................................................................');
    writeln('Osoby ktore na pierwszym miejscu podaly jeden z trzech najpopularniejszych utworow: ');
    writeln('.................................................................................');
    writeln;

        for i:= 0 to IloscOsob-1 do

         if ((Osoby[i].Utwory[1] = Tytuly[Max[1].Index])
         or (Osoby[i].Utwory[1] = Tytuly[Max[2].Index])
         or (Osoby[i].Utwory[1] = Tytuly[Max[3].Index]))
         then
   begin
   Writeln('Grupa ', Osoby[i].Grupa+1);
   writeln('Nazwisko: ',osoby[i].Nazwisko);
   writeln('Imie: ',osoby[i].imie);
   writeln('Wiek: ',osoby[i].wiek);
   writeln('Plec: ',osoby[i].plec);
   writeln('Utwor: ',osoby[i].Utwory[1]);
   writeln;
      end;

    Readln;
end.


 
0

Tutaj jest błąd:

   for I := 1 to 3 do
    Writeln(I, ' Utwor: ',Tytuly[Max[I].Index], ' Liczba Glosow: ', Max[I].Glosy);
  • dwie pętle i, j
  • warunek dla Max.Glosy, IloscGlosow
  • odpowiedź z Tytuly, Max.Glosy
    Twoja tablica Max powinna mieć inną nazwę. Wiele zmiennych typu Integer nie jest wcale potrzebnych.
    Ciekawy artykuł: Formatowanie kodu w Delphi
0

czyli ma być tak????

for i :=1 to 3 do
   for j:=1 to 3 do
             if  Max.Glosy= IloscGlosow   then
Writeln(I, ' Utwor: ',Tytuly[Max[I].Index], ' Liczba Glosow: ', Max[I].Glosy);

sory jeżeli nie ale no naprawde nie wiem...

0

szarp a czy nie mógł byś mi po prostu napisać kodu tego którego trzeba zmienić??? Wiem że na forum 4programmers nie pisze się gotowych programów ale ja się napracowałam jestem przy końcu programu i naprawdę nie wiem co zrobić:(. Z okazji świąt mógłbyś zrobić dla mnie wyjątek proszę cię bardzo ...:) będę bardzo wdzięczna z okazanej pomocy.

Życzę ci wesołych i świąt.

0

Zamień:

   for I := 1 to 3 do
    Writeln(I, ' Utwor: ',Tytuly[Max[I].Index], ' Liczba Glosow: ', Max[I].Glosy);

na (kod nie testowany):

q = High(Max);
w = High(IloscGlosow);

for i := 1 to q do
 begin
   WriteLn(i, ' miejsce:');
   for j := 1 to w do
     if Max[i].Glosy = IloscGlosow[j] then
       WriteLn('  ', Tytuly[j], ' (', Max[i].Glosy, ')');
 end;

q, w można sobie darować i podstawić zamiast nich: 3, 20.

0

szarp przykro mi ale nie dział ten kod bo głupoty wypisuje 3 razy dwa tytuły

mozesz to sprawdzic ponieważ mi na delphi nie działa poprawnie ten kod

0

Ten kod nie ma prawa działać dobrze, ponieważ źle wyszukujesz 3 największe liczby.
Oprócz tego mieszasz wyniki:

IloscGlosow[w] := 0;

Kod, o którym piszę:

  for Q := 1 to 3 do
    begin
      for W := 1 to 20 do
        if IloscGlosow[w] > Max[q].Glosy then
          begin
            Max[q].Glosy := IloscGlosow[W];
            Max[q].Index := W;
            IloscGlosow[w] := 0;
          end;
    end;

EDIT

Dla przykładu:
Podaję 1 osobę (tu Twój program się wysypie, powinnaś dać zabezpieczenie IloscOsob > 1).
Głosuję na pierwsze pięć utworów i otrzymuję:

IloscGlosow
Przed: 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Po:    0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Max (Glosy, Index)
Przed: (0, 0), (0, 0), (0, 0)
Po:    (1, 1), (1, 2), (1, 3)

Następnie kod, który Ci podałem wyświetla tytuły wg Twojego Max[] i IloscGlosow[].
Wszystkie Max[].Glosy = 1 w tym przypadku, a IloscGlosow posiada te wartości tylko
dla 4 i 5 utworu (powinno dla pierwszych pięciu).

Wyjście 1:
Zmieniasz Index w rekordzie Popularnosc na array of Integer i zapamiętujesz
wszystkie utwory pasujące do danego Max[] (i tak wymaga zmiany w pętli wyszukującej
maksymalne wartości).

Wyjście 2:
Zmieniasz kod w pętlach na wyszukiwanie maksymalnych wartości.

Cokolwiek wybierzesz, czeka Cię drobna zmiana w kodzie, który Ci podałem.
Dodatkowo brakuje kilku zabezpieczeń, np. 1 osoba może wybrać 5x ten sam utwór.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.