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

Problem z zadaniem "domowym" z portalu cpp0x

Object Storage Arubacloud
0 głosów
929 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez BroZor Nowicjusz (150 p.)

 

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.

mam problem z obliczeniem sumy wszystkich liczb zawsze mam wynik 999 nie wiem dlaczego się tak dzieje jestem raczej nowy w te klocki to mój kod 
 

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

using namespace std;

int liczba[999]; int licznik=0; int ile_liczb=0; int suma;

int main()
{
    cout << "Oto wszystkie liczby " <<endl;
    srand(time(NULL));

    do
    {
        ile_liczb++;
        liczba[licznik]=rand()%7+4;
        cout << "Oto liczba: " << liczba[licznik] <<" numer["<<ile_liczb<< "]" <<endl;
        licznik++;
        suma+=liczba[licznik];
    }while(ile_liczb<999);
    cout <<endl<< "po zsumowaniu tych liczb wychodzi: "<<suma;
    return 0;
}

1 odpowiedź

+1 głos
odpowiedź 14 maja 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)
wybrane 14 maja 2016 przez BroZor
 
Najlepsza

Odpowiedź jest prosta:

  • Najpierw zwiększasz zmienną licznik o 1, która jest indeksem w Twojej tablicy
  • A później dodajesz ten zwiększony, niewylosowany jeszcze element do tablicy

 Linijkę 19 oraz 20 należy zamienić miejscami:

suma+=liczba[licznik];
licznik++;

Teraz powinno działać. Najpierw dodajemy do sumy, a później przechodzimy do kolejnej komórki :-)

komentarz 14 maja 2016 przez BroZor Nowicjusz (150 p.)
dzięki wszystko działa przy tym kodzie popełniłem ogólem 2 banalne błędy włącznie z tym coś mi dziś nie idzie ale musiałem sobie powtórzyć kurs :)
komentarz 14 maja 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)

Sam fakt, że robisz zadania zasługuje na pochwałę ;-)

Przy okazji kilka rad:

  1. Staraj się ograniczać zmienne globalne, albo przynajmniej definiuj je po przecinku, np. int a, b, c = 0, d = 5;
  2. Zamień <time.h> na <ctime>. Jeśli piszesz w C++, to nie posługuj się bibliotekami <math.h> <stdio.h> <stdlib.h>. To nieeleganckie. Używaj zamiast tego: <cmath> <cstdio> <cstdlib>.
  3. Na pętli for potrafiłbyś to zadanie wykonać?
komentarz 14 maja 2016 przez BroZor Nowicjusz (150 p.)
wiem zazwyczaj tak robie ale gdy chcialem połączyć tablice z innymi zmiennymi wyskakiwał mi błąd więc robiłem inny dla każdego. normalnie robie zadania ale myśle że za szybko poszedłem w przód bo w 3 dni obejrzałem 6 kursów od Pana Mirosława i jestem tam gdzie jestem więc musze wszystko powtarzać zeby zapamiętać, na pętli for możliwe że tak wtedy chyba byłoby nawet łatwiej coś w stylu tego for(int i=0; i=999; i++) a dalej bym pogłowkował i jakoś zrobił
komentarz 14 maja 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)
for( int i = 0; i < 999; i++ )

Pętla wykonująca się 999 razy. Od 0 do 998. To jest klucz do sukcesu. Od tego zacznij. Oczywiście nie narzucam. Tylko sugeruję ;-)

komentarz 14 maja 2016 przez BroZor Nowicjusz (150 p.)
jak skoncze to podesle w komentarzu dam czas pracy i jakbys mogl to odpisz jak mi poszlo.

oraz oczywiście dziękuje za rady, na przyszłość się przydadzą :)
komentarz 14 maja 2016 przez BroZor Nowicjusz (150 p.)

Całe zajęło mi 14:02 miałem mały problem z tym gdzie wstawić sume żeby wszystko się obliczyło i zamiast napisania (int i=0; i<999; i++) napisałem (int i=0; i=999; i++) 

a to jest cały kod zastosowałem się do twoich porad.

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int a,b=0,c;

int main()
{

    srand(time(NULL));
    for(int i=0; i<999; i++)
    {
        a=rand()%7+4;
        b++;
        cout << "to liczba: " << a <<"numer[" << b<<"]" <<endl;
        c=c+a;
    }

        cout <<endl<< "to jest liczba po zsumowaniu: " << c;

    return 0;
}

 

komentarz 15 maja 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)

Zbędna zmienna i jeśli zmienna przechowuje sumę, to może niech nazywa się suma? :D
Kod ładny :-)

A teraz moja lekko poprawiona propozycja. Pozdrawiam ;-)

#include <iostream>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    int a, suma = 0;
    srand(time(NULL));

    for(int i=0; i<999; i++)
    {
        a=rand()%7+4;
        cout << "to liczba: " << a <<"numer[" << i+1<< "]" <<endl;
        suma += a;
    }
 
        cout << endl << "to jest liczba po zsumowaniu: " << suma;
 
    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 199 wizyt
0 głosów
3 odpowiedzi 238 wizyt
pytanie zadane 8 lipca 2017 w C i C++ przez Kacper Paluch Nowicjusz (150 p.)
+1 głos
2 odpowiedzi 175 wizyt
pytanie zadane 5 kwietnia 2016 w C i C++ przez Gravity Nowicjusz (150 p.)

92,537 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 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!

...