Problem z programem do obliczeń średniej ilości bramek

0

Mam napisać program, które zczytuje dane z pliku txt. Chodzi o wyniki meczy. Mam obliczyć średnia ilość bramek gośći w meczach wygranych przez gospodarzy oraz wartość minimalną, czyli najmniejsza sumę bramek jaka padła w meczu i z tym mam problem. Oto co udało mi się napisać.
program Gole;

{$APPTYPE CONSOLE}

uses
SysUtils;
type tablica=array[1..100] of integer;
var
n,i,min:integer;
a,b:tablica;
srednia:real;
p:textfile;

  begin
  assignfile(p,'Bramki.txt');
  reset(p);
  n:=0;
  while not eof(p) do begin n:=n+1; readln(p,a[n],b[n]); end;
  close(p);
  srednia:=0;
  for i:=1 to n do if a[i]>b[i] then srednia:=srednia+b[i];
  srednia:=srednia/n;
  writeln('srednia',srednia);
min:=a[i]+b[i];
for i:=1 to n do if a[i]+b[i]<min then min:=a[i]+b[i];
writeln('Wartosc minimalna=',min);
readln;
end.

dodanie znacznika <code class="delphi"> - fp

0

Jakbyś pokazał jak wygląda zawartość tego pliku tekstowego to by można lepiej dobrać sposób na napisanie takiego algorytmu; Poza tym sformatuj kod bo jest nieczytelny.

0

W pliku txt mam następujące wyniki:
6 3
2 2
3 4
2 3

0

Przede wszystkim zwrócić uwagę należy na to, że nie czytasz komunikatów:

[Warning] Project1.dpr(23): FOR-Loop variable 'i' may be undefined after loop

problem leży w tej linijce:

min:=a[i]+b[i];

zaraz przed ostatnią pętlą - wykorzystujesz zmienną i już poza pętlą;


Kolejna sprawa:

Mam obliczyć średnia ilość bramek gośći w meczach wygranych przez gospodarzy

Skoro masz obliczyć średnią ilość bramek jedynie w meczach, gdzie gospodarze wygrali to dlaczego obliczasz ją ze wszystkich meczów? Żeby taką średnią obliczyć musisz znać ilość meczy, w których gospodarz wygrał i zesumowaną ilość bramek dzielisz właśnie przez tą liczbę:

srednia := 0;
meczy := 0;

for i := 1 to n do
  if a[i] > b[i] then
  begin
    srednia := srednia + b[i];
    Inc(meczy);
  end;

srednia := srednia / meczy;

Musisz jeszcze zabezpieczyć program przed dzieleniem przez 0 - jeśli goście nie wygrali żadnego meczu wypisz odpowiedni komunikat, w przeciwnym razie wykonaj obliczenie średniej i wypisz wynik;


Następnie aby wyliczyć min musisz jej nadać jakąś wartość początkową, która optymistycznie myśląc będzie zawsze większa od ilości bramek:

min:= MaxInt; //czyli maksymalna wartość dla typu Integer

for I := 1 to n do
  if a[i] + b[i] < min then
    min := a[i] + b[i];

W ten sposób obliczysz minimalną ilość bramek ze wszystkich meczy (jeśli takie jest założenie);


W takim wypadku dla poniższej zawartości pliku:

6 3
2 2
3 4
2 3
  • średnia bramek gości w meczach wygranych przez gospodarzy: 3 (tylko wynik pierwszego meczu spełnia warunek),
  • minimalna ilość bramek w meczu: 4 (w drugim meczu strzelono najmniej bramek).

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