Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 10. 05. 2011 07:37

sivaki
Zelenáč
Příspěvky: 11
Reputace:   
 

Úloha v pascalu

Potřeboval bych lehce pomoct s touto úlohou:
Na vstupu jsou reálná čísla udávající teploty ve skladu za týden. Údaje jsou zaznamenávány každé 4 hodiny.
a musím určit
a) průměrnou teplotu za celý týden
b)dny, kdy průměrná denní teplota převyšovala průměrnou týdení teplotu
c)nefvyšší a nejnižší teplotu a den a hodinu, kdy byly naměřeny

jsem začátečník v pascalu tak si to moc nedávám :) ale to c) je nejhorší nevím jak to kombinovat s tím časem
předem dík za pomoc

Offline

  • (téma jako vyřešené označil(a) janca361)

#2 10. 05. 2011 11:22

Honzc
Příspěvky: 4647
Reputace:   248 
 

Re: Úloha v pascalu

↑ sivaki:
1. V sekci type
    Natypuješ  pole např.type Tdny= array[1..7] of Integer; (pole pro záznam dní kdy průměrná denní teplota je větší
    než průměrná týdenní - bude obsahovat pouze hodnoty 0 a 1)
    V sekci var
    Nadefinuješ pole např. teplota: array[1..42] of Real; (pole teplot)
    počet položek v poli je 42=7x6 (7 dní 6 měření za den)
    Nadefinuješ pole např.pdt: array[1..7] of Real; (pole průměrných denních teplot)
    Nadefinuješ pole např. tmax,tmin: array[1..2] of Extended; //(pole prumernych max. a min. teplot)
    Nadefinuješ pole např. dny: Tdny;
    Nadefinuješ  ptt: Real; (průměrná týdenní teplota)                         
                       dt: Real;
                       i: Integer;
                       s: String;
     Nadefinuješ funkce např.
     function Vdny(den: Tdny): String;
     var  j: Integer;
     begin
        Result := '';
        for j := 1 to 7 do
          if den[j]=1 then
             case j of
               1: Result := Result+'pondeli ';
               2: Result := Result+'utery ';
               3: Result := Result+'streda ';
               4: Result := Result+'cvrtek ';
               5: Result := Result+'patek ';
               6: Result := Result+'sobota ';
               7: Result := Result+'nedele ';
          end;
     end; 
    function Maxt(x,y: Real): String;
    begin
      Result := 'tmax= '+FloatToStr(y)+' st.C, namereno: ';
      case Trunc(x) of
           1..6: Result := Result+'pondeli ';
          7..12: Result := Result+'utery ';
         13..18: Result := Result+'streda ';
         19..24: Result := Result+'cvrtek ';
         25..30: Result := Result+'patek ';
         31..36: Result := Result+'sobota ';
         37..42: Result := Result+'nedele ';
      end;
      case Trunc(x) mod 6 of
        1: Result := Result+'v 1.00 hod.';
        2: Result := Result+'v 5.00 hod.';
        3: Result := Result+'v 9.00 hod.';
        4: Result := Result+'v 13.00 hod.';
        5: Result := Result+'v 17.00 hod.';
        0: Result := Result+'v 21.00 hod.';
      end;
    end;
    function Mint(x,y: Real): String;
    begin
      Result := 'tmin= '+FloatToStr(y)+' st.C, namereno: ';
      case Trunc(x) of
           1..6: Result := Result+'pondeli ';
          7..12: Result := Result+'utery ';
         13..18: Result := Result+'streda ';
         19..24: Result := Result+'cvrtek ';
         25..30: Result := Result+'patek ';
         31..36: Result := Result+'sobota ';
         37..42: Result := Result+'nedele ';
      end;
      case Trunc(x) mod 6 of
        1: Result := Result+'v 1.00 hod.';
        2: Result := Result+'v 5.00 hod.';
        3: Result := Result+'v 9.00 hod.';
        4: Result := Result+'v 13.00 hod.';
        5: Result := Result+'v 17.00 hod.';
        0: Result := Result+'v 21.00 hod.';
      end;
    end;
2. ze vstupu načteš do pole postupně jednotlivé teploty.
3. ať je to jednoduché, tak v 7-mi cyklech spočítáš průměrné denní teploty v jednotlivých dnech
                      dt := 0;
    pro pondělí: for i := 1 to 6 do
                          dt := dt+teplota[i];
                       pdt[1] := dt/6;
                       dt := 0;
    pro úterý:    for i := 7 to 12 do
                          dt := dt+teplota[i];
                       pdt[2] := dt/6;
    atd. až do neděle
4. Spočítáš průměrnou týdenní teplotu (ad a))
    ptt := 0;
    for i := 1 to 7 do
      ptt := ptt+pdt[i];
    ptt := ptt/7; 
    WriteLn('Prumerna tydenni teplota je ',ptt);
5. Vyselektuješ dny, kdy průměrná denní teplota je větší než průměrná týdenní (ad b))
     for i := 1 to 7 do
       if pdt[i]>ptt then
         dny[i] := 1
       else
         dny[i] := 0;
     WriteLn('Vypis dnu, ve kterych je prumerna teplota vyssi nez prumerna tydenni teplota:');
     s := Vdny(dny);
     WriteLn(s);
6.  Urcis den a hodinu kdy je teplota maximalni a potom minimalni (ad b))
     WriteLn(' c) Nejvyssi a nejnizsi teploty (den, hodina)');
     tmax[1] := 1; tmax[2] := teplota[1];
     tmin[1] := 1; tmin[2] := teplota[1];
     for i := 2 to 42 do
     begin
       if teplota[i]>tmax[2] then
       begin
         tmax[1] := i;
         tmax[2] := teplota[i];
       end;
       if teplota[i]<tmin[2] then
       begin
         tmin[1] := i;
         tmin[2] := teplota[i];
       end;
     end;
     s := Maxt(tmax[1],tmax[2]);
     WriteLn('    ',s);
     s := Mint(tmin[1],tmin[2]);
     WriteLn('    ',s);
     ReadLn;

Offline

 

#3 10. 05. 2011 16:25

sivaki
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Úloha v pascalu

od 2. bodu se dá říct že tomu rozumím ale ty funkce nahoře mi dělají problémy už jen to result vidím poprvé a ty operace kolem něj, nešlo by to nějak obejít ?
každopádně díky za rady ;)

Offline

 

#4 10. 05. 2011 19:49

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Úloha v pascalu

Zdravím,
funkce se nauč používat. Je to dobrá věc. Představ si to jako černou krabičku, do které nevidíš. Něco do ní dáš (vstup) a něco jiného Ti z ní vyleze (výstup). Vstup pro funkci se řeší v programování pomocí parametru funkce. Výstup se pak řeší pomocí klíčového slova return. V pascalu return není, návratová hodnota se tam řeší pomocí jména funkce. :-)


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#5 11. 05. 2011 11:10

Honzc
Příspěvky: 4647
Reputace:   248 
 

Re: Úloha v pascalu

↑ sivaki:
Tak ty funkce předělej třeba na procedury
Např. funkci Vdny přepiš na proceduru
procedure Vdny(den: Tdny; var s1: String);
var  j: Integer;
begin
  s1 := '';
  for j := 1 to 7 do
    if den[j]=1 then
      case j of
        1: s1 := s1+'pondeli ';
        2: s1 := s1+'utery ';
        3: s1 := s1+'streda ';
        4: s1 := s1+'cvrtek ';
        5: s1 := s1+'patek ';
        6: s1 := s1+'sobota ';
        7: s1 := s1+'nedele ';
      end;
end;
a pak řádek
s := Vdny(dny);
přepiš na
Vdny(dny,s);

Offline

 

#6 17. 05. 2011 10:59

sivaki
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Úloha v pascalu

a tenhle úsek se má nějak předělat když to budu dělat v tech procedurach?

Result := 'tmax= '+FloatToStr(y)+' st.C, namereno: ';
     case Trunc(x) of
          1..6: Result := Result+'pondeli ';

ja právě u tehle části nevím co vlastně dělá

Offline

 

#7 18. 05. 2011 12:40 — Editoval Honzc (24. 05. 2011 11:21)

Honzc
Příspěvky: 4647
Reputace:   248 
 

Re: Úloha v pascalu

↑ sivaki:
Tak třeba takto:
    procedure Maxt(x,y: Real; var s2:String);
    begin
      s2 := 'tmax= '+FloatToStr(y)+' st.C, namereno: ';
      case Trunc(x) of
           1..6: s2 := s2+'pondeli ';
          7..12: s2 := s2+'utery ';
         13..18: s2 := s2+'streda ';
         19..24: s2 := s2+'cvrtek ';
         25..30: s2 := s2+'patek ';
         31..36: s2 := s2+'sobota ';
         37..42: s2 := s2+'nedele ';
      end;
      case Trunc(x) mod 6 of
        1: s2 := s2+'v 1.00 hod.';
        2: s2 := s2+'v 5.00 hod.';
        3: s2 := s2+'v 9.00 hod.';
        4: s2 := s2+'v 13.00 hod.';
        5: s2 := s2+'v 17.00 hod.';
        0: s2 := s2+'v 21.00 hod.';
      end;
    end;
A pak místo s := Maxt(tmax[1],tmax[2]);
dát             Maxt(tmax[1],tmax[2],s);

Offline

 

#8 18. 05. 2011 13:45

sivaki
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Úloha v pascalu

takze jestli to dobre chapu v te 6. se mi najde největší a nejmenší teplota tydne a tyhle procedury k ni přiřadí den a kdy byla naměřena ?

Offline

 

#9 18. 05. 2011 14:34 — Editoval Honzc (19. 05. 2011 06:11)

Honzc
Příspěvky: 4647
Reputace:   248 
 

Re: Úloha v pascalu

↑ sivaki:
Ne tak to není.
Jak jsou ty hodnoty teplot zadány.
Přeci každý den je naměřeno 6 hodnot.
Ty jsou v poli uspořádány za sebou, takže 1..6 -tý prvek pole odpovídá pondělí, 7..12-tý prvek je úterý atd.
Tohle
case Trunc(x) of
   1..6: s2 := s2+'pondeli '; říká
jestliže je x rovno 1 až 6 potom víme, že je to teplota naměřená v pondělí pro 7 až 12 v úterý atd.
My do té procedury za to x dosadíme proměnnou tmax[1], která obsahuje pořadí  v poli teplot (tedy obsahuje pořadové číslo)
Potom to
case Trunc(x) mod 6 of
    1: s2 := s2+'v 1.00 hod.';
znamená, že jestliže zbytek po dělení čísla x číslem 6 je 1, byla naměřená hodnota naměřena jako první v nějakém dni (ovšemže ten den už jsme zjistili před tím) jestli je to dvojka (2) pak to bylo druhé měření atd.
To, že se pořád píše  s2+'v 1.00 hod.'; je jenom proto, aby v té proměnné s2 byla uložena celá věta.
Po editaci
Já jsem tvůj dotaz špatně pochopil. Ano je to tak jak píšeš. To co jsem napsal před tím ber pouze jako vysvětlení.

Offline

 

#10 23. 05. 2011 20:09

sivaki
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Úloha v pascalu

tak jsem program přepsal ve verzi s těma funkcema a skusil spustit ale pise mi to chybu s tím result a to ve vsech tech funkcich a ještě byh se rad zeptal na tuhle cast... Result := 'tmin= '+FloatToStr(y)+' st.C, namereno: '; ... tomuhle řadku nejak nerozumim nebo nevim co dělá

Offline

 

#11 24. 05. 2011 06:25 — Editoval Honzc (24. 05. 2011 11:21)

Honzc
Příspěvky: 4647
Reputace:   248 
 

Re: Úloha v pascalu

↑ sivaki:
Jestli ti to Result nebere, tak to přepiš na procedury.
Poslední (ostatní jsem ti už přepsal) třeba takto:
    procedure Mint(x,y: Real; var s3:String);
    begin
      s3 := 'tmin= '+FloatToStr(y)+' st.C, namereno: ';
      case Trunc(x) of
           1..6: s3 := s3+'pondeli ';
          7..12: s3 := s3+'utery ';
         13..18: s3 := s3+'streda ';
         19..24: s3 := s3+'cvrtek ';
         25..30: s3 := s3+'patek ';
         31..36: s3 := s3+'sobota ';
         37..42: s3 := s3+'nedele ';
      end;
      case Trunc(x) mod 6 of
        1: s3 := s3+'v 1.00 hod.';
        2: s3 := s3+'v 5.00 hod.';
        3: s3 := s3+'v 9.00 hod.';
        4: s3 := s3+'v 13.00 hod.';
        5: s3 := s3+'v 17.00 hod.';
        0: s3 := s3+'v 21.00 hod.';
      end;
    end;
A pak místo s := Mint(tmin[1],tmin[2]);
dát             Mint(tmin[1],tmin[2],s);

Řádek Result := 'tmin= '+FloatToStr(y)+' st.C, namereno: '; (ve funkci), který v proceduře
bude: s3 := 'tmin= '+FloatToStr(y)+' st.C, namereno: ';
přiřazuje proměnné (ve funkci výsledku), v proceduře s3 (potažmo v konkrétním použití procedury proměnné s)
text, který se potom vypíše na obrazovku.
Ten text je: tmin=(hodnota té minimální teploty, uložené v proměnné tmin[2])  st.C, namereno:
No a zatím se pak vypíše, který den a ve kterou hodinu jsem to naměřili.
(proto vždy k té proměnné "přičítáme" ten další text.
Tedy "nový text"="starý text"+"nově přidaný text"
           s3        :=      s3       +     'pondeli ';

Offline

 

#12 24. 05. 2011 08:04

sivaki
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Úloha v pascalu

ted jsem spoučtěl tu verzi s procedurama  a chybu to pise v těchto dvou příkazech s3 := 'tmin= '+FloatToStr(y)+' st.C, namereno: ';
a pak ještě jednu uplne nesmyslnout ve for cyklu ve kterým vyplňuju tu proměnou teplot [1..42] 
for i:=1 to 42 do begin
write(‘Zadej teplotu: ‘);
readln(teplota[i]);
end;

Offline

 

#13 24. 05. 2011 09:13

sivaki
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Úloha v pascalu

tak jsem nad tim este celkově přemejšlel a říkám si že by nemuselo být špatný řešení udělat to pomocí matice jako že třeba řádky budou dny a slopce hodyny, z toho pole si najdu ten největší a nejmenší a pak to musim nějak přiřadit ten řaden a sloupec

Offline

 

#14 24. 05. 2011 11:31 — Editoval Honzc (24. 05. 2011 11:56)

Honzc
Příspěvky: 4647
Reputace:   248 
 

Re: Úloha v pascalu

↑ sivaki:
1. Použít matici by samozřejmě šlo. (ale bylo by to pro tebe trochu složitější)
2. s3 := 'tmin= '+FloatToStr(y)+' st.C, namereno: '; - tenhle řádek je naprosto korektní, zde by chyba být neměla.
    Možná, že to hází chybu tady: 31..36: s3 := s3t+'sobota ';, protože tam to t za s3 nemá být, (zůstalo z Result při
    přepisování)
3. ....vyplňuju tu proměnou teplot [1..42] . Nemáš třeba jednou pole pro teploty označené  teplot[1..42] a podruhé
    teplota[i] - viz. readln(teplota[i]);
Jestli vyplňuješ pole tak, že ho vypisuješ tak možná zkus použít automatické vyplnění viz. níže.
  Randomize;
  WriteLn;
  for i := 1 to 42 do
    case i of
      1,7,13,19,25,31,37:
        teplota[i] := RandomRange(0,30)/10+9;
      2,8,14,20,26,32,38:
        teplota[i] := RandomRange(0,30)/10+9;
      3,9,15,21,27,33,39:
        teplota[i] := RandomRange(0,40)/10+13;
      4,10,16,22,28,34,40:
        teplota[i] := RandomRange(0,40)/10+23;
      5,11,17,23,29,35,41:
        teplota[i] := RandomRange(0,40)/10+19;
      6,12,18,24,30,36,42:
        teplota[i] := RandomRange(0,40)/10+15;
    end;
Nezapomenout přidat do sekce uses  Math //(jednotku)

Po editaci
Ještě k tomu bodu 1. Máš proceduru
procedure Mint(x,y: Real; var s3:String);
nebo takto
procedure Mint(x,y: Real; s3:String);
Správně má být to první (s var s3)

Offline

 

#15 28. 05. 2011 18:39

sivaki
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Úloha v pascalu

tak jsem to ukazoval učitelovi a ten mi říkal ať to udělám pomocí té matice že to bude prej přehlednější
myslim že ru matici zvladnu napsat ale tak nějak nevim jak z te matice vytahnout tu informaci o času a dnu to budu dělat asi nějakým case

Offline

 

#16 31. 05. 2011 10:11 — Editoval Honzc (31. 05. 2011 10:12)

Honzc
Příspěvky: 4647
Reputace:   248 
 

Re: Úloha v pascalu

↑ sivaki:
Žádný vlastní návrh?
Jestli to bude přehlednější je jenom otázka vkusu.
Zkus se zamyslet nad následujícím.
Co kdybychom nadefinovali dvourozměrné pole (třeba přirozených čísel), kde první index by nějak odpovídal dnům, a druhý hodinám v jednotlivém dni.

Offline

 

#17 31. 05. 2011 23:08

sivaki
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Úloha v pascalu

takhle nejak mam v planu řešit tu posledni otazku mam to ale zkraceny nechtelo se mi vypisovat vsechny dny
ale zrovna tady mi to nejak nepocita minimalni teplotu nvm ale moc jsem to este nekontroloval
tak se podivej co ty na to :)


program nic;
var m:array [1..6,1..7] of real;
i,j: integer;
tmax:array [1..10,1..10] of real;
tmin: array [1..10,1..10] of real;
tmaxi,tmini: real;
s1,s2,s3,s4: string[40];


begin


for i:=1 to 3 do
  for j:=1 to 3 do
   begin
    write('zadej teplotu v ',i,'. dni a ', j ,'. zadavanou teplotu ');

    readln (m[i,j]);
   end;

    for i:=1 to 3 do
      for j:=1 to 3 do
   begin

       if m[i,j]>tmaxi then
       begin
         tmaxi:= m[i,j];
         case i of
         1: s1:= 'pondeli';
         2: s1:= 'utery';
         3: s1:= 'streda';
         end;

         case j of
         1: s2:= '1.cas';
         2: s2:= '2.cas';
         3: s2:= '3.cas';
         end;
       end;
   end;

     for i:=1 to 3 do
       for j:=1 to 3 do
   begin

       if m[i,j]<tmini then
       begin
         tmini := m[i,j];

          case i of
         1: s3:= 'pondeli';
         2: s3:= 'utery';
         3: s3:= 'streda';
         end;

         case j of
          1: s4:= '1.cas';
         2: s4:= '2.cas';
         3: s4:= '3.cas';
         end;
       end;
   end;


   writeln('tak tohle by mela byt nej teplota tydne ',tmaxi:6:2,' a tohle den namereni ',s1,' a tohle cas namereni ',s2);
   writeln('tohle je nejmensi teplota tydne ',tmini:6:2,' a den namereni ',s3,' a tady je cas ',s4) ;


  readln;
end.

Offline

 

#18 01. 06. 2011 20:38 — Editoval sivaki (01. 06. 2011 21:38)

sivaki
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Úloha v pascalu

tak takhle ted vypada ten muj kod pořád mi nejde pocitani nejmensi teploty pritom je to stejny jako pocitani te nejvetsi nevim v cem je chyba

prosim skus se na to este mrknout

Code:

program teploty;
var m:array [1..6,1..7] of real;
i,j: integer;
pdt: array[1..7] of real;
dt: real;
ptt: real;
tmaxi,tmini: real;
s1,s2,s3,s4,s5: string[40];



begin
  tmaxi:=0;
  tmini:=0;



 for i:=1 to 3 do
   begin
    dt:=0;
  for j:=1 to 2 do
   begin
    write('zadej teplotu v ',i,'. dni a ', j ,'. zadavanou teplotu ');
    readln (m[i,j]);

    dt:=dt+m[i,j];
     pdt[i]:=dt/2;


   end;
  end;


     for i := 1 to 3 do

         ptt := ptt+pdt[i];
       ptt := ptt/3;


      WriteLn('Prumerna tydenni teplota je ',ptt:6:2);
      writeln('Zde jsou vyps ny dny kdy prumerna deni teplota prevysila prumernou tydeni teplotu');
      for i:= 1 to 3 do begin

        if pdt[i]>ptt then begin

   case i of
    1: s5:= 'pondeli';
    2: s5:= 'utery';
    3: s5:= 'streda';
    4: s5:= 'ctvrtek';
    5: s5:= 'patek';
    6: s5:= 'sobota';
    7: s5:= 'nedele';
    end;
    end;
    Writeln(s5);
    end;



    for i:=1 to 3 do
      for j:=1 to 2 do
   begin

       if m[i,j]>tmaxi then
       begin
         tmaxi:= m[i,j];
         case i of
         1: s1:= 'pondeli';
         2: s1:= 'utery';
         3: s1:= 'streda';
         4: s1:= 'ctvrtek';
         5: s1:= 'patek';
         6: s1:= 'sobota';
         7: s1:= 'nedele';
         end;

         case j of
         1: s2:= '4:00';
         2: s2:= '8:00';
         3: s2:= '12:00';
         4: s2:= '16:00';
         5: s2:= '20:00';
         6: s2:= '24:00';
         end;
       end;
   end;

     for i:=1 to 3 do
       for j:=1 to 3 do
   begin

       if m[i,j]<tmini then
       begin
         tmini := m[i,j];

          case i of
         1: s3:= 'pondeli';
         2: s3:= 'utery';
         3: s3:= 'streda';
         4: s3:= 'ctvrtek';
         5: s3:= 'patek';
         6: s3:= 'sobota';
         7: s3:= 'nedele';
         end;

         case j of
         1: s4:= '4:00';
         2: s4:= '8:00';
         3: s4:= '12:00';
         4: s4:= '16:00';
         5: s4:= '20:00';
         6: s4:= '24:00';
         end;
       end;
   end;


   writeln('nejvetsi namerena teplota tydne: ',tmaxi:6:2,'. Den, kdy byla namerena: ',s1,'. Cas namereni: ',s2);
   writeln('nejmensi namerena teplota tydne: ',tmini:6:2,'. Den, kdy byla namerena: ',s3,'. Cas namereni: ',s4) ;


  readln;
end.

Offline

 

#19 02. 06. 2011 10:40 — Editoval Honzc (02. 06. 2011 14:17)

Honzc
Příspěvky: 4647
Reputace:   248 
 

Re: Úloha v pascalu

↑ sivaki:
Tak tedy:
1. Pole m máš špatně nadefinované (dní je 7, počet měření 6)
    má být m:array [1..7,1..6] of real;
2. Možná, že jenom z úporných důvodů měříš pouze pondělí - středa (3 dny) a jenom 2x (4.00,800)
    Kdybys totiž měřil tak jak máš, tak bys na to přehozené pole přišel, protože by ti to házelo chybu.
3. ptt je potřeba na začátku nastavit na 0.
4. V tomhle cyklu
    for i := 1 to 3 do begin
      if pdt[i]>ptt then begin
        case i of
          1:s5 := 'pondeli';
          2:s5 := 'utery';
          3:s5 := 'streda';
          4:s5 := 'ctvrtek';
          5:s5 := 'patek';
          6:s5 := 'sobota';
          7:s5 := 'nedele';
        end;
      end;
      Writeln(s5);
    end;
   je nesprávně vypisováno s5.
   Totiž, když bude např. průměrná teplota vyšší v pondělí a ve středu než je týdenní průměrná teplota, tak ti to
   vypíše
   pondeli
   pondeli
   středa
   prostě s5 je vypisováno pokaždé. Protože na začátku je s5 prázdný string (text) tak se ti mohlo zdát, že
   ti to pracuje dobře.
   Náprava:
   for i := 1 to 3 do begin
      if pdt[i]>ptt then
      begin
        case i of
          1:s5 := 'pondeli';
          2:s5 := 'utery';
          3:s5 := 'streda';
          4:s5 := 'ctvrtek';
          5:s5 := 'patek';
          6:s5 := 'sobota';
          7:s5 := 'nedele';
        end;
      end
      else
        s5 := '';
      if s5<>'' then
        Writeln(s5);
    end;
5. Ke špatnému výpisu tmini.
    Jednak máš v cyklu
    for i := 1 to 3 do
      for j := 1 to 3 do
      begin
        if m[i,j]<tmini then
        begin
          tmini := m[i,j];
    atd.
    místo 2 číslo 3
    a navíc protože tmini je na začátku nastaveno na 0, tak pokud nebude někdy teplota záporná, tak nikdy nenastane
    podmínka   m[i,j]<tmini a tudíž tmini bude pořád 0. (Jenom tak na okraj. I kdybys to měl ošetřené dobře, tak
    vzhledem k té chybě v cyklu (for j := 1 to 3 do místo for j := 1 to 2 do), a protože si vyplnil jen 2 hodnoty
    měření každý den, tak v každém dni je třetí hodnota také 0 a tudíž by ti to stejně vypsalo tmini=0)
    Náprava:
    Před cyklem je potřeba nastavit tmini na nejvyšší hodnotu a tou je samozřejmě tmaxi.
    Tedy přidáš řádek tmini := tmaxi;
    A samozřejmě změnit tu trojku na dvojku.
6. Ještě jedna poznámka:
    Pokud bys zadal všechny teploty pod nulou (tedy se znaménkem -, např. by se měřilo v zimě), tak ti to zase špatně
    vybere i tmaxi (opět by to byla 0)
    Takže by bylo dobré na začátku tmaxi nastavit na nějakou hodně mínusovou hodnotu. (třeba -300, což je hodnota
    menší než absolutní 0)

Po editaci
  Ještě jsem přišel na jednu věc
  V cyklu
  for i:=1 to 3 do
  begin
    dt:=0;
    for j:=1 to 2 do
    begin
      write('zadej teplotu v ',i,'. dni a ', j ,'. zadavanou teplotu ');
      readln (m[i,j]);
      dt:=dt+m[i,j];
      pdt[i]:=dt/2;
    end;
  end;
  to chce  pdt[i]:=dt/2; vyhodit za to první end;
  for i:=1 to 3 do
  begin
    dt:=0;
    for j:=1 to 2 do
    begin
      write('zadej teplotu v ',i,'. dni a ', j ,'. zadavanou teplotu ');
      readln (m[i,j]);
      dt:=dt+m[i,j];
     
    end;
    pdt[i]:=dt/2;
  end;

Offline

 

#20 07. 06. 2011 07:29

sivaki
Zelenáč
Příspěvky: 11
Reputace:   
 

Re: Úloha v pascalu

tak jsem práci v pondělí odevzdával a ještě jsem vám tady chtěl poděkovat moc jste mi pomohl :) takže díky :)

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson