Zadanie z kursu, dotyczące sumowania wylosowanych liczb

0

Witam. Ucze się języka c++ z jednego kursu z neta, nie będę podawał linku ale mam problem z wykonaniem zadania.

Napisz program, który wylosuje 999 liczb całkowitych z zakresu od 4 do 10 włącznie, wypisze te wartości na ekran, po czym zsumuje je i wynik wypisze na ekran. Program ma wykorzystywać tablicę, która zostanie najpierw wypełniona liczbami losowymi z określonego przedziału, a następnie wynik zostanie obliczony na podstawie zawartości całej tablicy.

Pierwszą część zrobiłem czyli losuje 999 licz z przedziału, wyświetla je. Nie umiem jednak zsumować tych liczb. Oto mój kod:

#include <cstdio>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <cstdlib>
#include <ctime>
using namespace std;

int hehe()
{

int x=999;
int y=0;

do{
    int liczba = (rand() % 7) + 4;
    int wynik[x];
    wynik[x]=liczba;
    y++;
cout << wynik[x] << endl;
} while(y<999);

}



int main()
{

srand( time (NULL));
hehe();

return 0;

}

Mam świadomość, że mój wynik składa się z 999 elementów ale jak je wszystkie dodać?

PS.
biblioteki zostały z innych zadań...

0

Zadeklaruj pewną zmienną całkowitą suma z wartością 0 a później w pętli dodawaj do tej sumy kolejne elementy tablicy.

Aha no i tablicę źle wypełniłeś indexy tablicy powinny się zmieniać teraz wpisujesz wszystko pod ostatni element.

3

Dla realizacji tego zadania nie musisz mieć tablicy.
Wystarczy tyle:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
  {
   srand(time(0));
   int suma=0;
   for(int i=0,value=0;i<999;++i,suma+=value) cout<<(value=(rand()%7)+4)<<endl;
   cout<<"suma wynosi "<<suma<<endl;
   return 0;
  }

http://ideone.com/Mnpd1c

0

Właśnie tak myślałem, na samym początku zrobiłem to tak :

int hehe()
{
    int x=0;
int y=0;
do{
    int liczba = (rand() % 7) + 4;
    int wynik[x];
    wynik[x]=liczba;
    y++;
    x++;
cout << wynik[x] << endl;



} while(y<999);
}



int main()
{



    srand( time (NULL));

int ww=hehe();
cout << ww << endl;



return 0;

}

Ale co jakiś czas wyskakuje liczba 16, nie wiem jakim cudem...
Teraz muszę iść, jeśli możesz to napisz mi kod z tą sumą, postaram się to sam zrobić ale nie wiem czy dam rade... No i co jest nie tak z tą 16?

Wiem wiem ale chodzi o to, żeby zrobić to w tablicy ;d Jak tego nie pojme to co dopiero dalej... :)

1
int tablica[999];
int suma=0;
for (int i=0; i<999;i++)
{
suma=suma+tablica[i];    // dodaje kolejne elementy tablicy np. tablica[0], tablica[1]
}

reszte kodu dopisz sam :)

0

Dzięki za pomoc, tyle, że ja to miałem zrobić za pomocą samych tablic, pętli do..while oraz instrukcji if (do tej pory tylko to poznałem :P). Dragon, bo napisałeś mi że moja funkcja nic nie zwraca. Gdy w mojej funkcji zamienie cout << wynik[x] << endl; na return wynik[x] to program wyświetla liczbę 0. Co robie źle?

0

Zwracasz wynik w złym miejscu? o_O Przecież zwrócic coś powinieneś dopiero na koniec funkcji, po pętli...
Poza tym nie bardzo rozumiem co ty chcesz zwrócić.

0

Nie ogarniam tego już... Chce wylosować 999 liczb z przedziału 4-10. Następnie wypisać je na ekran (każda pod sobą), a potem zsumować je wszystkie. Mogę użyć do tego:
-funkcji
-pętli (do..while)
-instrukcji if
-tablic jednowymiarowych

Mój kod wygląda następująco :

int hehe()
{
    int x=0;
int y=0;
do{
    int liczba = (rand() % 7) + 4;

    int wynik[x];
    wynik[x]=liczba;
    y++;
    x++;



} while(y<999);
return wynik[x];
}



int main()
{



    srand( time (NULL));

int ww=hehe();
cout << ww << endl;



return 0;

}

Póki co wywala błąd przy returnie po pętli w funkcji. Próbowałem przypisać wynik[x] do innej zmiennej, a następnie zwrócić ją ale coś nie działa, nie umiem. Proszę o pomoc, proszę o poprawienie kodu, chciałbym sobie go na spokojnie przeanalizować, co robie źle.

0

Zmienną (tablicę) wynik deklarujesz wewnątrz do..while, a potem próbujesz użyć jej poza tą pętlą (po jej zakończeniu) - niestety, zmienne mają swój zakres. W najbardziej łopatologicznym wytłumaczeniu - nie istnieją poza nawiasami klamrowymi. Zadeklaruj sobie wynik[] przed pętlą. I od razu nadaj jej wielkość (999 elementów), bo tutaj to robisz ciągle nowe tablice, a nie zwiększasz tę jedną.

Dodatkowo, tutaj próbujesz zwracać wynik[x], a tutaj prawdopodobnie x miałby taką wartość, że wyszedłbyś poza tablicę, bo w pętli masz x++. Ale jak rozumiem powinieneś zwrócić sumę liczb, a ty tutaj zwracasz (próbujesz) co najwyżej ostatnią wartość z tablicy x.

0

wskaż miejsce w którym sumujesz te liczby

0

Kurde no nie moge sobie z tym poradzić... Ale wiem co może mi pomóc ;d Powiedzcie mi czemu nie wyświetla mi liczby[1]? Tzn wyświetla ale 256. Próbowałem ją zwrócić za pomocą return liczba[1]; ale też nic to nie dało. Próbowałem zwrócić ją za pętlą ale dalej to samo... Cały czas zwraca liczbę 256. Nie rozumiem dlaczego? Tak jakby nie została przypisana wartość do liczba[1] no ale skoro nie została przypisana to nie wyskakiwałoby cały czas 256 tylko różne liczby... Gdzie mam ją zadeklarować i jak żeby na ekranie zwróciło wartość liczba[1]?

int hehe()
{
int y=0;
int liczba[999];
int wynikk;
wynikk=liczba[999];

do{
    liczba[999] = (rand() % 7) + 4;
    cout << liczba[999] << endl;
    y++;
    __cout << "haha" << liczba[1] << endl;__
}while(y<999);

return 0;

}

I jeszcze jednego nie rozumiem... Gdybym nie dodał
int wynikk;
wynikk=liczba[999];
które jest w ogóle niepotrzebne bo nigdzie nie deklaruje 'wynikk' to losowałoby bez końca. Czemu?

0

Nie rozumiesz kodu, którym się posługujesz w ten sposób potrwa to ze sto lat. Wróć do kursu przeczytaj jeszcze raz o tablicach, jak się je deklaruje, odwołuje do wybranych elementów, lub zmienia wybrane elementy. Cały czas w pętli odwołujesz się do sztywno nadanego indeksu - ręce opadają.
Lektura dla ciebie: http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Tablice-jednowymiarowe/292

0
swirus1231 napisał(a):

Powiedzcie mi czemu nie wyświetla mi liczby[1]? Tzn wyświetla ale 256. Próbowałem ją zwrócić za pomocą return liczba[1]; ale też nic to nie dało. Próbowałem zwrócić ją za pętlą ale dalej to samo... Cały czas zwraca liczbę 256. Nie rozumiem dlaczego? Tak jakby nie została przypisana wartość do liczba[1] no ale skoro nie została przypisana to nie wyskakiwałoby cały czas 256 tylko różne liczby... Gdzie mam ją zadeklarować i jak żeby na ekranie zwróciło wartość liczba[1]?

Jak nie nadałeś wartości to wartość zostaje przypadkowa i się nie zmienia.
Można zmienić np tak: liczba[1]=13;

swirus1231 napisał(a):
int hehe()
{
int y=0;
int liczba[999];
int wynikk;
wynikk=liczba[999]; // nie ma takiego indeksu. można używać od liczba[0] do liczba[998]

do{
    liczba[999] = (rand() % 7) + 4; // nie ma takiego indeksu. może miałeś na myśli liczba[y]
    cout << liczba[999] << endl; // nie ma takiego indeksu. może miałeś na myśli liczba[y]
    y++;
    __cout << "haha" << liczba[1] << endl;__
}while(y<999);

return 0;

}
swirus1231 napisał(a):

I jeszcze jednego nie rozumiem... Gdybym nie dodał
int wynikk;
wynikk=liczba[999];
które jest w ogóle niepotrzebne bo nigdzie nie deklaruje 'wynikk' to losowałoby bez końca. Czemu?
Kto ci naopowiadał takich bzdur ?

0

Dobra przewałkuje jeszcze raz tablice... Właśnie z tego kursu się ucze.

1

Może tak? http://ideone.com/T9khbM

#include <iostream>
#include <random>
#include <array>
using namespace std;

int main() {
	const unsigned seed = 42, size = 999;
	const int minDist = 4, maxDist = 10;
	
	default_random_engine generator(seed);
	uniform_int_distribution<> distribution(minDist, maxDist);
	array<int, size> numbers;
	unsigned sum = 0;
	
	for(auto &number : numbers){
		sum += (number = distribution(generator));
		cout << number << endl;
	}
	
	cout << "Sum: " << sum;
	return 0;
}

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