Analiza ankiety (pascal)

2011-12-16 17:01

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

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.
edytowany 1x, ostatnio: madmike, 2011-12-16 17:13
Pokaż pozostałe 6 komentarzy
aha.. bo ja to robiłam fpc :\ czy to źle??? - ola21 2011-12-16 17:16
@Patryk: skoro złe wyświetlanie miało Ci przeszkodzić w udzieleniu pomocy koleżance... Teraz pomagaj - nie masz już wymówki :D - madmike 2011-12-16 17:16
Ech, za dużo tekstu, a za mało obrazków :) Jak widzisz - ciągle mam :D - Patryk27 2011-12-16 17:17
to pomożesz?:) - ola21 2011-12-16 17:26
nie wiem czy do tej pory w ogóle jest dobrze te zadanie , bo mogłam nie zrozumieć treści ale wydaje mi się że dobrze zrobiłam... - ola21 2011-12-16 17:39

Pozostało 580 znaków

2011-12-16 18:13

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

0

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

Pozostało 580 znaków

2011-12-16 18:47

Rejestracja: 9 lat temu

Ostatnio: 6 lat temu

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

Pozostało 580 znaków

2011-12-16 19:20

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

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...

Pozostało 580 znaków

2011-12-17 13:42

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

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.
edytowany 2x, ostatnio: ola21, 2011-12-17 16:01

Pozostało 580 znaków

2011-12-18 13:29

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

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.


Moonless Sky
Becoming the Getsuga itself.
edytowany 1x, ostatnio: Szarp, 2011-12-18 13:31

Pozostało 580 znaków

2011-12-18 22:15

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

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:(

edytowany 1x, ostatnio: ola21, 2011-12-19 12:03
EDYTUJ swoje posty jeśli chcesz coś dodać/zmienić - nie twórz posta pod postem! - madmike 2011-12-18 22:21
Masz już dwie pętle z q i w, wystarczy skopiować, zmienić warunek i instrukcje. - Szarp 2011-12-19 14:28

Pozostało 580 znaków

2011-12-21 23:09

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

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.
edytowany 1x, ostatnio: ola21, 2011-12-21 23:10

Pozostało 580 znaków

2011-12-22 10:25

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

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

Moonless Sky
Becoming the Getsuga itself.
edytowany 5x, ostatnio: Szarp, 2011-12-22 10:29

Pozostało 580 znaków

2011-12-23 11:42

Rejestracja: 8 lat temu

Ostatnio: 8 lat temu

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...

edytowany 2x, ostatnio: madmike, 2011-12-23 11:50
no jak nie działa to trzeba trochę pokombinować i coś zmienić ;p albo wrócić do podstaw: tablice, pętle... - Szarp 2011-12-23 15:02

Pozostało 580 znaków

ola21
2011-12-23 20:35
ola21
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.

Pozostało 580 znaków

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