PASCAL problem z funkcją sumowania liczb


(Paulpolska) #1

Nie wiedziałem jak określić temat

 

Problem polega na tym, że funkcja ma dodawać wartości do WynikA  oraz WynikB  ale tylko wówczas gdy LiczbaA od LiczbaB  ( Nie gdy liczba będzie większa o dowolną wartość ) będzie większa o 40 a dodawać po równo gdy będzie między zakresem 21 a 39. Kombinowałem w następujący sposób

 

//Efekt - tylko pierwszy rząd dobrze odczytuje liczby a kolejne 9 przypisuje je z pierwszej

Jak poniżej

 

1:0 //wynik POPRAWNY

80 //wartości A jest większa o 50 więc 1:0 dla A

30

 

1:0 // przypisuję znów 1:0 mimo iż wartości nie spełniają wymogów

40 // Wynik będzie 1:0 dla kolejnych rezultatów aż do końca bez względu na różnice liczb

45

program pilka;
uses crt;
var Wsp1,i,Wsp2,WynikA,WynikB,n:integer;
LiczbaB: array[1..10] of integer;
LiczbaA: array[1..10] of integer;
begin
clrscr;
n:= 0;
WynikA:=0;
WynikB:=0;
Readln(Wsp1);
ReadLn(Wsp2);
 
 
Randomize;
for i:=1 to 10 do
begin
LiczbaA[i]:= Random(100) + Wsp1;
LiczbaB[i]:= Random(100) + Wsp2;
 end;
If LiczbaA[i] > LiczbaB[i] + 40 then
begin
n:=n+1;
WynikA := WynikA + 1;
end;
If (LiczbaA[i] > LiczbaB[i] + 20) and (LiczbaA[i] < LiczbaB[i] + 39) then
Begin
WynikA:= WynikA + 1;
WYnikB:= WynikB + 1;
n:=n+1;
end;
 
If LiczbaB[i] > LiczbaA[i] + 40 then
begin
WynikB := WynikB + 1;
n:=n+1;
end;
If (LiczbaB[i] > LiczbaA[i] + 20) and (LiczbaB[i] < LiczbaA[i] + 39) then
Begin
WynikA:= WynikA + 1;
WYnikB:= WynikB + 1;
n:=n+1;
end;
//until n=10;
for i:=1 to 10 do
begin
writeln(WynikA,':',WynikB);
writeln(LiczbaA[i]);
Writeln(LiczbaB[i]);
readkey;
end;
 
end.

(rgabrysiak) #2

Czerwony kolor jest zastrzeżony dla administracji, dlatego też proszę skorzystać z przycisku Edytuj  i opcji Użyj pełnego edytora , a następnie dokonać korekty postu..


(Grzelix) #3

Przeglądając pobieżnie twój kod:

  1. Masz złe warunki logiczne

  2. Można to bardzo uprościć. 

 

Mianowicie

 

Oczekujesz dwóch przypadków:

  1. Dodajesz do liczby większej jeśli różnica jest większa od 40

  2. Dodajesz do obu jeśli różnica jest w przedziale 21, 39 - pasowało by sprecyzować czy jest to przedział [21,39] czy (21, 39) (domknięty czy otwarty http://pl.wikibooks.org/wiki/Matematyka_dla_liceum/Liczby_i_ich_zbiory/Przedziały_liczbowe))

 

Pseudo kod:

if( abs(LiczbaA - LiczbaB) >40)
begin
    if(LiczbaA > LiczbaB)
    begin
        WynikA := WynikA + 1;
    end
    else
    begin
        WynikB := WynikB + 1;
    end
end
else if (abs(LiczbaA - LiczbaB)>20)
begin
    WynikA := WynikA + 1;
    WynikB := WynikB + 1;
end

EDIT:

Nie wiem jaki chcesz uzyskać końcowy efekt- przyrostowe wyniki, czy wyniki dla każdej pary osobno,

tutaj masz kod z wynikami przyrostowymi:


(Paulpolska) #4

Wielkie dzięki za pomoc. Kod działa tak jak chciałem. Trochę wzbogaciłem swoją wiedzę dzięki temu