Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem] Losowanie liczb z pętla while


Rekomendowane odpowiedzi

Opublikowano

Witam. Mój program ma domyślnie wylosować 999 cyfr od 4 do 10 ( stworzyć 999 zmiennych za pomocą tablicy jednowymiarowej) potem wypisać je na ekranie i na końcu wszystkie je dodać. Cały program ma zostać stworzony tylko przy pomocy funkcji, argumentów funkcji itp,

 

Program gdy w funkcji void wylosujLiczby dopisze linijkę cin>>losowanie [ licznik ] ; to program w konsoli karze wpisać liczby a gdy tą linijkę usunę to się crash uje. Jak to POPRAWIĆ \

 

kod:

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

void wylosujLiczby (int losowanie[] , int elementy , int zakresMin , int zakresMax )
{
    int licznik = 0 ;
   do
   {   cin>>losowanie [ licznik] ;  // gdy ta linijka jest to karze wpisac cyfry recznie,
   //gdy nie ma to program sie jakby "crashuje"
       losowanie [licznik] = (rand()%zakresMin)+zakresMax ;
       licznik++ ;
   }while( licznik< elementy) ;
}

void wypiszLiczby( int losowanie[] , int elementy)
{
    int licznik =0 ;
    cout<<"wylosowane liczby to:  " ;

    do
    {
        cout<< losowanie [ licznik ] ;
    }while(licznik<elementy) ;
}

int obliczSume ( int  losowanie[] , int elementy)
 {

  int licznik(0) ;
  int suma(0) ;
 do
 {
  suma+= losowanie[ licznik] ;
 }while( licznik<elementy) ;
  return suma ;
  }

int main()
{
    srand(time(NULL)) ;
    int tablica[ 999 ];
    wylosujLiczby( tablica, 999, 4, 10 );
    wypiszLiczby( tablica, 999 );
    int iSuma = obliczSume( tablica, 999 );
    cout << "Suma liczb wynosi: " << iSuma << endl;
    return 0;

}

 

Kocham mpcforum.pl!!!

18706.png

Opublikowano

Ogólnie obiekt cin przechwytuje wartość z konsoli wpisaną przez użytkownika, więc raczej jest zbędna.

Resztę zaraz sprawdzę i dam edita ;).

 

Przy funkcji wypiszLiczby w pętli while nie ma inkrementowania tego licznika, więc pętla jest nieskończona, to samo w obliczSume.

 

Wszystko mi działa, ale chyba coś źle w losowaniu zrobiłeś, bo zakres w argumentach ma być od 4 do 10, a tak to losuje od 10 do 14.


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano

No dobra już mi działą losowanie , na odwrót zrobiłem :P zamiast o 4 do 10 , to od 10 do 14 . Ale dalej jest problem bo po wypisaniu liczb nie sumuje ich ;/

 

 

 

PS. już działą :D Dzięki Ci =3. :D takie drobne błędy a psują człowiekowi nerwy ;p

Kocham mpcforum.pl!!!

18706.png

Opublikowano

Pisałem przecież, że w sumie masz identyczny problem jak w wypisaniu?

 

@DOWN: jakbym mu już tego nie napisał, geniuszu.


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano

Losowanie z zakresu jest błędne.

Dodatkowo, po co Ci "cin", skoro losujesz a nie podajesz liczby [bezmyślne klepanie kodu]

Formatowanie kodu pozostawia wiele do życzenia.

W funkcji obliczSuma nie zwiększasz licznika - masz nieskończoną pętle.

@Up edytować posta każdy potrafi, jak ja napisałem to twój post był "zaraz dam edita" więc przysłowiowo odp...l sie.

#Edit2 DO @=3. bo ja w przeciwieństwie do Ciebie czasami odchodzę od komputera :)

Opublikowano

@Up edytować posta każdy potrafi, jak ja napisałem to twój post był "zaraz dam edita" więc przysłowiowo odp...l sie.

 

Nie wiem, jak szybko piszesz posty, ale edytowałem posta 10 minut przed tym, jak opublikowałeś swojego ;).


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano
#include <iostream>
#include <ctime>
using namespace std;
 
void wylosujLiczby(int losowanie[], int elementy, int zakresMin, int zakresMax)
{
	int licznik = 0;
	do
	{   
		losowanie[licznik] = zakresMin + rand()%zakresMax;
		licznik++;
	}while(licznik <= elementy) ;
}
 
void wypiszLiczby(int losowanie[], int elementy)
{
    int licznik =0 ;
    cout << "Wylosowane liczby to: \n" ;
    do
    {
		cout << licznik << ": " << losowanie[licznik] << "\n";
		licznik++;
    }while(licznik <= elementy);
}
 
int obliczSume(int losowanie[], int elementy)
{
	int licznik = 0;
	int suma = 0;
	do
	{
		suma += losowanie[licznik] ;
		licznik++;
	}while(licznik <= elementy) ;
	return suma ;
}
 
int main()
{
    int tablica[ 999 ];
	int ilosc_elementow = 50;
    srand(time(NULL)) ;

    wylosujLiczby(tablica, ilosc_elementow, 4, 20);
    wypiszLiczby(tablica, ilosc_elementow);

    int iSuma = obliczSume(tablica, ilosc_elementow);
    cout << "Suma liczb wynosi: " << iSuma << endl;

    return 0;
}

Formatowanie kodu dużo pomaga :)

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

Opublikowano

@Vesim. Masz źle napisaną funkcję losującą liczby i wychodzisz poza zakres tablicy (w porównaniach licznik>=elementy)

Dodatkowo. Po to stworzono różne rodzaje pętli, żeby można było wybrać jaka jest najlepsza do danego zadania. Tutaj najlepszym rozwiązaniem byłaby pętla for.

#include <iostream>
#include <ctime>
using namespace std;
   
void wylosujLiczby(int losowanie[], int elementy, int zakresMin, int zakresMax)
{
    for(int i = 0; i<elementy; ++i) losowanie[i] = zakresMin + rand()%(zakresMax-zakresMin);
}
   
void wypiszLiczby(int losowanie[], int elementy)
{
    cout << "Wylosowane liczby to: \n" ;
    for(int i = 0; i<elementy;++i) cout << i<< ": " << losowanie[i] << '\n';
}
   
int obliczSume(int losowanie[], int elementy)
{
    int suma = 0;
    for(int i = 0; i<elementy;++i) suma += losowanie[i] ;
    return suma;
}
   
int main()
{
    srand(time(NULL)) ;
    int tablica[ 999 ];
    int ilosc_elementow = 50; //czemu nie 999?
  
    wylosujLiczby(tablica, ilosc_elementow, 4, 20);
    wypiszLiczby(tablica, ilosc_elementow);
  
    int iSuma = obliczSume(tablica, ilosc_elementow);
    cout << "Suma liczb wynosi: " << iSuma << '\n'; //endl? po co
  
    return 0;
}
w dodatku przyjmij sobie jedna konwencję nazewnictwa. Poszukaj po internecie różnych popularnych i wybierz taką, która ci pasuje i jej przestrzegaj. Mam na myśli to, że raz używasz asd_asd, raz iAsd, a raz asdAsd

 

trochę tego postu tyczy się do autora tematu troche do @Vesim

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...