[C] Wartość max, min oraz suma losowych elementów tablicy

Awatar użytkownika
Assassin-Girl
Użytkownik
Użytkownik
Posty: 76
Rejestracja: 22 lut 2013, o 18:32
Płeć: Kobieta
Lokalizacja: Maczu-Pikczu
Podziękował: 33 razy

[C] Wartość max, min oraz suma losowych elementów tablicy

Post autor: Assassin-Girl »

Cześć. Mam do zrobienia program, który znajduje maksymalną oraz minimalną wartość w tablicy wypełnionej losowymi liczbami z wybranego przez nas zakresu i sumuje ich wartości. Oto mój kod:

Kod: Zaznacz cały

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define size 10

int losuj(int n)
{
	int i;
	static int raz=1;
	if (raz)		
	{				
		srand(time(0));
		raz=0;
	}
	i = rand()%n;
	return i;
}

int main()
{
	int i, n, min, max, suma=0, t[size];
	printf("Podaj zakres losowych liczb:	");
	scanf("%d",&n);
	printf("
");
	for(i=0;i<size;i++)
	{
		t[i]=losuj(n);
		printf("%d ",losuj(n));
		suma +=t[i];
	}
	min=max=t[0];
	for(i=0;i<size;i++)
	{	
		if(t[i]>max) max=t[i];
		if(t[i]<min) min=t[i];
	}
	printf("
SUMA: %d
MIN: %d
MAX: %d",suma,min,max);
	return 0;
}
Nie mam pojęcia, dlaczego nie chce działać. Dla nielosowych elementów (od 1 do 100) działa jak złoto.

Za wszelkie wskazówki z góry dzięki. ;)
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10225
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2362 razy

[C] Wartość max, min oraz suma losowych elementów tablicy

Post autor: Dasio11 »

Assassin-Girl pisze:

Kod: Zaznacz cały

...
	for(i=0;i<size;i++)
	{
		t[i]=losuj(n);
		printf("%d ",losuj(n));
		suma +=t[i];
	}
...
Wszystko jest dobrze, tylko wyświetlane są nowe losowe liczby, a nie elementy tablicy t. Wystarczy zamienić:

printf("%d ",losuj(n)); \(\displaystyle{ \to}\) printf("%d ", t[i]);.
Awatar użytkownika
Assassin-Girl
Użytkownik
Użytkownik
Posty: 76
Rejestracja: 22 lut 2013, o 18:32
Płeć: Kobieta
Lokalizacja: Maczu-Pikczu
Podziękował: 33 razy

[C] Wartość max, min oraz suma losowych elementów tablicy

Post autor: Assassin-Girl »

I wszystko jasne.

Dzięki wielkie. ;)
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C] Wartość max, min oraz suma losowych elementów tablicy

Post autor: Althorion »

Ja się jeszcze przyczepię do funkcji losuj:

Kod: Zaznacz cały

static int raz=1;
if (raz)      
{            
   srand(time(0));
   raz=0;
}
Że co, że jak, że po co?
Awatar użytkownika
Assassin-Girl
Użytkownik
Użytkownik
Posty: 76
Rejestracja: 22 lut 2013, o 18:32
Płeć: Kobieta
Lokalizacja: Maczu-Pikczu
Podziękował: 33 razy

[C] Wartość max, min oraz suma losowych elementów tablicy

Post autor: Assassin-Girl »

Dla mnie ta funkcja też jest tak potrzebna jak rybie ręcznik, ale dodam na swoją obronę, że jest wymysłem prowadzącej, nie moim.
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C] Wartość max, min oraz suma losowych elementów tablicy

Post autor: Ser Cubus »

zamień

Kod: Zaznacz cały

#define size 10
na

Kod: Zaznacz cały

const size 10
stosowanie define nie jest błędem, ale powinno się tego unikać
Awatar użytkownika
Althorion
Użytkownik
Użytkownik
Posty: 4541
Rejestracja: 5 kwie 2009, o 18:54
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 9 razy
Pomógł: 662 razy

[C] Wartość max, min oraz suma losowych elementów tablicy

Post autor: Althorion »

Assassin-Girl pisze:Dla mnie ta funkcja też jest tak potrzebna jak rybie ręcznik, ale dodam na swoją obronę, że jest wymysłem prowadzącej, nie moim.
OK. Przyczepiłem się dlatego, że choć wydzielanie małych funkcji z programu jest ogólnie rzeczą dobrą, to w tym przypadku jest to nadmiarowe: funkcja losuj(int n) ma tę samą funkcjonalność, co rand() % n po jednorazowej inicjalizacji RNG. Można uważać, że Twoje rozwiązanie ma przewagę w postaci połączenia tej inicjalizacji z jej wykorzystaniem, ale uważam że jego wady przeważają nad tą zaletą: funkcja ta ma efekt uboczny (właśnie tę inicjalizację), jest też wg mnie nadmiernie skomplikowana (większość jej ciała stanowi jednorazowa instrukcja).
ODPOWIEDZ