logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Błędne obliczenia sumy w funkcji suman w Pascalu - jak naprawić?

hitman71 09 Gru 2007 19:41 1502 5
REKLAMA
  • #1 4570313
    hitman71
    Poziom 10  
    Posty: 14
    Witam
    Mam problem z tablica w pascalu. Wszystko dziala az do funkcji "suman", gdzie nie liczy prawidlowo sumy liczb w tablicy, prosze o pomoc :)

     program faktury;
      uses crt;
      const
       N=10;
      type
      tab=array[1..N] of integer;
      var
       liczbaa,i,sumana,sumaba,sumapa,maxa:integer;
       a:tab;
    
     procedure czytaj(var t:tab; var liczba:integer);
      var i:integer;
      begin
       write('Podaj ilosc wprowadzanych faktur: ');
       readln(liczba);
       if liczba>N
        then liczba:=N;
       writeln('Podaj ',liczba,' wartosci cen netto faktur: ');
       for i:=1 to liczba do
       read(t[i]);
      end;
      procedure wypisz(var t:tab; var liczba:integer);
       var i:integer;
       begin
        for i:=1 to liczba do
         write(t[i],'  ');
        writeln;
        readln;
       end;
      function maxi(var t:tab; var liczba:integer): integer;
       var i,max,k:integer;
       begin
        max:=t[1];
        k:=1;
        for i:=2 to liczba do
         begin
          if t[i]>max
           then
            begin
             max:=t[i];
             k:=i;
            end;
         end;
        writeln('maxymalna cena netto to ',max,' i jej numer to ',k);
       end;
      function suman(var t:tab; var liczba:integer): integer;
       var sn,i:integer;
          begin
          for i:=1 to liczba do
          sn:=sn+t[i];
          writeln('Suma netto faktur wynosi ',sn);
        end;
      begin
       clrscr;
       czytaj(a,liczbaa);
       wypisz(a,liczbaa);
       maxa:=maxi(a,liczbaa);
       sumana:=suman(a,liczbaa);
       writeln('Nacisniecie klawisza Enter zakonczy prace programu');
       readln;
      END.


    Kod proszę umieszczać w znacznikach code - krzychoocpp
  • REKLAMA
  • Pomocny post
    #2 4570560
    RhinoRace
    Poziom 17  
    Posty: 127
    Pomógł: 21
    Ocena: 1
    czemu w funkcji suman nie inicjujesz wartosci zmiennej sn? nie pamietam jak to wygladalo w Pascalu, ale podejrzewam, ze na poczatku w niej znajduja sie jakies smieci do ktorych dodajesz komorki tablicy i dlatego wynik masz nieprawidlowy
    nie wspominajac, ze fukcje maxi i suman powinny zwracac jakas wartosc
  • REKLAMA
  • Pomocny post
    #3 4570742
    przemo_wielki
    Poziom 24  
    Posty: 583
    Pomógł: 61
    Ocena: 10
    Nie kompilowałem ale w funkcji suman zmienna typu integer sn powinna byc ustawiona na 0 czyli
    sn:=0;

    function suman(var t:tab; var liczba:integer): integer;
       var sn,i:integer;
          begin
          sn:=0; //wyzerowanie zmiennej 
          for i:=1 to liczba do
          sn:=sn+t[i];
          writeln('Suma netto faktur wynosi ',sn);
        end;
  • REKLAMA
  • #4 4570888
    hitman71
    Poziom 10  
    Posty: 14
    dziekuje bardzo, pomoglo:)
    teraz mam inny problem, poniewaz nie potrafie pomnozyc tablicy przez pierwiastek
    np. t[i]*(19/100)
    to niestety nie dziala, jak sie mnozy przez zwykla liczbe to dziala a jak chce zrobic pierwiastek czyli dodaje dzielenie to juz niechce skompilowac, macie jakies pomysly jak to zrobic??
  • REKLAMA
  • #5 4571076
    Łuk_F
    Poziom 17  
    Posty: 257
    Pomógł: 34
    Ocena: 12
    Problemem pewnie jest typ zmiennej do której chcesz zapisać wynik całej operacji. Operacja dzielenia (pierwiastkowania) daje wynik rzeczywisty i nie da się go w bezpośrednio przypisac zmiennej całkowitoliczbowej.
  • #6 16995527
    hitman71
    Poziom 10  
    Posty: 14
    dziękuję za pomoc !
REKLAMA