C dodawanie wylosowanych liczb do tablicy dynamicznej

0

Cześć,
Mam za zadanie napisać program, który bedzie liczył średnią, po wpisaniu ilości liczb, będzie trzeba albo te liczby samemu wpisać, albo program bedzie musiał wylosować. Zdecydowałem się wykorzystać tablice dynamiczną. Nie wiem tylko jak zrobić, aby w miejscu losowania, program losował liczby i dodawał je do tablicy, oraz wyświetlał, przykładowo jak zadeklarujemy na poczatku 3 liczby to niech wyświetla "pierwsza wylosowana liczba:"
Mógłby ktoś mi pomóc?
Mam taki kawałem kodu:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
system("cls");
printf("\n Dynamiczna tablica \n");
int n; 
int *tablica;
int *i,*koniec; 
int wybor;
printf("Podaj rozmiar tablicy: ");
scanf("%d",&n); 
tablica=(int*)malloc(n*sizeof(int)); 
i=tablica;
koniec=tablica+n*sizeof(int);
puts("Wybierz operacje:\n1 - losowanie\ - wpisywanie");
scanf("%d", &wybor);
if(wybor == 1) {
for(tablica;tablica<(koniec);tablica=tablica+sizeof(int)){
puts("tu jest miejsce na losowanie");
}
} 
else {
for(tablica;tablica<(koniec);tablica=tablica+sizeof(int)){
printf("Podaj wartosc: ");
scanf("%d",tablica);}
}
return 0;
}

0

Drogi uzytkowniku. Pozostawiam tobie jako zachete do napisania reszty kodu, gdzie uzytkownik bedzie wpisywal wybrane przez siebie liczby. Analogicznie do tego jak to zostalo zrobione w przypadku losowania, lecz zamiast przypisania do tablicy od razu zmiennych losowych, po prostu bedziesz je wpisywal sam.



int main()
{
	int *tablica;
	int rozmiar;
	int wynik=0;
	float srednia;
	
	std::cout << "Podaj rozmiar tablicy: \n"; //printf("podaj rozmiar tablicy ");
	std::cin >> rozmiar; scanf("%d", &rozmiar);
	
	//tworzymy dynamiczna tablice
	
	tablica=(int *)malloc(rozmiar *sizeof(int));
	//jesli progs ma sam wylosowac te liczby to wykorzystujemy funkcje rand()
	
	srand(time(NULL)); // zawsze wywolywane przed rozpoczeciem losowania
	
	for(int i=0; i<rozmiar; i++)
	{
		tablica[i]=rand() & 10+1;
		std::cout << "\nWylosowana liczba nr: " << i +1  << " = " << tablica[i]; // printf("wylosowana liczba nr %d", i +1 )
                                                                                                              //printf(" = %d", tablica[i]);
		
	}
	//teraz liczymy srednia oczywiscie tak jak uczono w szkole...
	for(int j=0; j<rozmiar; j++)
	{
		wynik=wynik+tablica[j];
		
		}
		srednia=wynik/(float)rozmiar;
		std::cout << "\n srednia arytmetyczna losowanych liczb to: " << srednia;  printf("srednia arytmetyczna losowanych liczb to: %f", srednia);
	
	
	
	system("PAUSE");
}


zapomnialem dodac, ze aby moc skorzystac z funkcji rand() nalezy dodac plik naglowkowy time.h... czyli #include <time.h> :)

0

koniec=tablica+n;
poczytaj o operacjach na wskaźnikach.

0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
system("cls");

int n; 
int *tablica;
int *i,*koniec; 
int wybor;
float średnia;
int wynik=0;
printf("Podaj rozmiar tablicy: ");
scanf("%d",&n); 
tablica=(int*)malloc(n*sizeof(int)); 
i=tablica;
koniec=tablica+n*sizeof(int);
puts("Wybierz operacje:\n1 - losowanie\n2 - wpisywanie");
scanf("%d", &wybor);
if(wybor == 1) {
for (int i = 0 ; i < n ; ++i) tablica[i] = rand() % 1000;	

for (int i = 0 ; i < n ; ++i) printf("%d. wylosowana liczba to %d\n", i + 1, tablica[i]);	
} 
else {
for (tablica;tablica<(koniec);tablica=tablica+sizeof(int)){
printf("Podaj wartosc: ");
scanf("%d",tablica);}
}
for(int j=0; j<rozmiar; j++)
        {
                wynik=wynik+tablica[j];
 
                }
                srednia=wynik/(float)n;
                printf("\n srednia arytmetyczna losowanych liczb to: " << srednia;)



return 0;
}

gdzie tu są błędy?

0

program w języku C

0

To jest źle:
koniec=tablica+n*sizeof(int);
ma być:
koniec=tablica+n;

To jest źle:
for (tablica;tablica<(koniec);tablica=tablica+sizeof(int)){
ma być:
for (tablica;tablica<koniec;++tablica){

Masz poczytać o operacjach na wskaźnikach.
Jakiego słowa nie rozumiesz?

0

Ok, poprawiłem

tylko teraz zawsze mi wychodzi srednia 0,000, jak to poprawić?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
system("cls");

int n; 
int *tablica;
int *i,*koniec; 
int wybor;
float srednia;
int wynik=0;
printf("Podaj rozmiar tablicy: ");
scanf("%d",&n); 
tablica=(int*)malloc(n*sizeof(int)); 
i=tablica;
koniec=tablica+n;
puts("Wybierz operacje:\n1 - losowanie\n2 - wpisywanie");
scanf("%d", &wybor);
if(wybor == 1) {
for (int i = 0 ; i < n ; ++i) tablica[i] = rand() % 1000;	

for (int i = 0 ; i < n ; ++i) printf(" wylosowana liczba to %d\n", i + 1, tablica[i]);	
} 
else {
for (tablica;tablica<koniec;++tablica){
printf("Podaj wartosc: ");
scanf("%d",tablica);}
}
for(int j=0; j<n; j++)
        {
                wynik=wynik+tablica[j];
 
                }
                srednia=wynik/(float)n;
                printf("\n srednia arytmetyczna losowanych liczb to: %f, srednia "); 



return 0;
}
0

bo tu:
for (tablica;tablica<koniec;++tablica){
zmieniłeś adres początku tablicy.

0

Czyli jak ma to wyglądać, żeby działało poprawnie? Bo nie bardzo rozumiem

0

Zrozumieć wskaźniki lub je nie używać.

0

Co mi sie nie podoba:

Najpierw masz:
int *i

później:
for (int i = 0

Ale niech Ci będzie :)

Zamień:

 for (tablica;tablica<koniec;++tablica){
printf("Podaj wartosc: ");
scanf("%d",tablica);}

na:

 int *z;
z = tablica;
for (z;z<koniec;++z){
printf("Podaj wartosc: ");
scanf("%d",z);}

Poza zmainą adresu początku tablicy źle masz wyświetlanie średniej:
printf("\n srednia arytmetyczna losowanych liczb to: %f, srednia ");

zmień na:
printf("\n srednia arytmetyczna losowanych liczb to: %f", srednia );

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