[C]Tablica

Radziuuu
Użytkownik
Użytkownik
Posty: 19
Rejestracja: 4 lut 2017, o 20:50
Płeć: Mężczyzna
Lokalizacja: gubin
Podziękował: 5 razy

[C]Tablica

Post autor: Radziuuu »

Witam
mam problem z zadaniem,
w tablicy posiadającej n wierszy i m kolumn przechowywane są dane o energii elektrycznej pobranej w przeciągu czterech miesięcy. Poszczególne wiersze odpowiadają poszczególnym odbiorcom, kolumny-miesiącom. Należy określić odbiorce który pobrał najwięcej energii w ciągu 4 miesięcy.

Męczę się z tym i nie potrafię znaleźć błędu, nie ważne jakie wartości podam zawsze wychodzi odbiorca nr 2.


Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>

#define LO 3
#define LM 4


int main() {
float tab [LO][LM], max=0, suma;
int i,j,p;

for(i=0; i<LO; i++)
{
	for(j =0; j<LM; j++)
{
		
printf("
 Podaj energie dla odbiorcy %d w mies %d: ", i+1, j+1);
scanf("%f", &tab[i][j]);
suma=suma+tab[i][j];

}
if(suma>max){

suma=max;
p=i;
}

suma=0;

}	

printf("
 Odbiorca nr %d pobral najwiecej energii w ciagu czterech miesiecy 
", p);
	
	
system("PAUSE");
return 0;}




Awatar użytkownika
Dreeze
Użytkownik
Użytkownik
Posty: 37
Rejestracja: 8 maja 2017, o 19:00
Płeć: Mężczyzna
Lokalizacja: Kraków
Pomógł: 14 razy

Re: [C]Tablica

Post autor: Dreeze »

Otrzymujesz wartość 2, bo jest to ostatnia wartość jaką widzi kompilator (tablice numerowane są od zera, więc 2, to odbiorca nr 3 w kodzie który przedstawiłeś).

Błąd natomiast jest tutaj:

Kod: Zaznacz cały

if(suma>max){

suma=max;
p=i;
}
Poprawiony kod powinien wyglądać tak:

Kod: Zaznacz cały

if(suma>max){

max=suma; // Podstawiamy sume w maxie nie na odwrót
p=i+1; // Tablica jest numerowana od zera, więc trzeba indeks zwiększyć o jeden 
}
Mógłbyś jeszcze rozwinąć program, aby sprawdzał, czy suma==max, bo może się zdarzyć, że kilku odbiorców pobrało tyle samo energii i jest to maksimum.
ODPOWIEDZ