• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Losowanie liczb - funkcje i tablice

Object Storage Arubacloud
0 głosów
1,565 wizyt
pytanie zadane 26 kwietnia 2017 w C i C++ przez vasquez Początkujący (480 p.)

Hej. Piszę program który ma wylosować 10 liczb z zakresu od 4 do 10, zapisać je w tablicy, wypisać, a potem je dodać. Mają być wykorzystane funkcje. Program losuje wszystkie takie same liczby. Suma też jest jakaś dziwna. Pomoże ktoś?

#include <iostream>
#include <time.h>
#include <cstdlib>

using namespace std;

int suma(int liczby[],int s)
{
    int i=0;
    do
    {
        int sm;
        return sm+=liczby[i];
        s++;
    }while (s<11);

}

void losowacz(int liczby[])
{
    srand( time( NULL ) );
    int i=0;
    do
    {
       liczby[i] = rand()%7+4;
       i++;
    } while (i<11);

}

void wypisywacz (int liczby[])
{
    int i=0;
    int ile=1;
    do
    {
        cout << "Liczba " << ile << " to: " << liczby [i] << endl;
        ile++;
    }while (ile < 11);

}


int main()
{
    int ile=1;
    int i=0;
    int k=1;
    int liczby [10];
    losowacz(liczby);
    wypisywacz (liczby);
    cout << "Suma wynosi: " << suma(liczby,1) << endl;

    return 0;
}

 

3 odpowiedzi

0 głosów
odpowiedź 26 kwietnia 2017 przez tangarr Mędrzec (154,860 p.)
wybrane 26 kwietnia 2017 przez vasquez
 
Najlepsza
1. srand( ) powinno być wywołane tylko raz (na początku programu)
2. funkcja suma do przepisania.
    - zmienną sm deklarujesz przed pętlą i inicjalizujesz zerem
    - dopóki i<s dodajesz liczbę z tablicy do sm
    - po zakończeniu pętli zwracasz sm
komentarz 26 kwietnia 2017 przez vasquez Początkujący (480 p.)
Dzięki bardzo. głupie błędy zrobiłam, muszę się bardziej skupić :p
0 głosów
odpowiedź 26 kwietnia 2017 przez SebekChlebek Stary wyjadacz (11,290 p.)
srand( time( NULL ) );

Na początku w mainie powinien być i tylko raz się to pisze.

int suma(int liczby[],int s)

{

    int i=0;

    do

    {

        int sm;

        return sm+=liczby[i];

        s++;

    }while (s<11);


}

nie zwiększasz zmiennej "i" dlatego dodaje 10 razy 1 wylosowaną liczbę do NIE ZAINICJALIZOWANEJ zmiennej sm dlatego masz dziwny wynik. sm daj na zewnątrz pętli i dopisz = 0;

 

Przy wypisywaniu tak samo nie zwiększasz zmiennej i.

 

EDIT:

return w funkcji sumującej daj na zewnątrz pętli

 

 

komentarz 26 kwietnia 2017 przez SebekChlebek Stary wyjadacz (11,290 p.)
int suma(int liczby[], int s)
{
	int i = 0;
	int sm = 0;
	do
	{
		sm += liczby[i];
		s++;
		i++;
	} while (s<11);

	return sm;
}

void losowacz(int liczby[])
{
	
	int i = 0;
	do
	{
		liczby[i] = rand() % 7 + 4;
		i++;
	} while (i<11);

}

void wypisywacz(int liczby[])
{
	int i = 0;
	int ile = 1;
	do
	{
		cout << "Liczba " << ile << " to: " << liczby[i] << endl;
		ile++;
		i++;
	} while (ile < 11);

}

Poprawiłem żeby działało, nie patrzyłem na inne błędy typu: definiowanie zmiennej i jej nie używanie :)

komentarz 26 kwietnia 2017 przez vasquez Początkujący (480 p.)
Dzięki bardzo :)
0 głosów
odpowiedź 26 kwietnia 2017 przez Antero00 Gaduła (3,670 p.)

Dodatkowo wychodzisz poza zakres tablicy. 

do
{
// .....
}while("zmienna" < 10 );

 

Podobne pytania

0 głosów
2 odpowiedzi 1,728 wizyt
pytanie zadane 26 maja 2020 w C i C++ przez saju13013 Nowicjusz (230 p.)
+2 głosów
3 odpowiedzi 1,184 wizyt
0 głosów
1 odpowiedź 1,156 wizyt

92,575 zapytań

141,424 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...