Rand zwracanie dziwnych wartości

0

Witam, mam zadanie do zrobienia. Po szukaniu przez ponad 2h błędu przy pomocy googli jakichś wskazówek muszę poprosić o wytknięcie mi błedu tutaj. Taki oto kod, (polecenie jest w komentarzu na górze):

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


/* Program losuje 10 liczb i zapisuje je do tablicy tab
jeżeli parzyste to wpisuje do tablicy b, jeżeli nieparzyste to wypisujemy do tablicy a

- podajemy liczbę x
-sumujemy wartość w tablicy a i w tablicy b, do każdej wartości w tablicy dodajemy liczbę x.
- wypisujemy na ekranie wszystkie liczby parzyste*/
/*********************************************************************/
main()
{
srand((unsigned)time(0)); 
int x;
int c;
int tab[10];
int a[10];
int b[10];
int i;
int sumaA, sumaB;
for (i = 0; i < 10; i++)
{    c = (rand()%29)+1; 
    tab[i] = c;   
    if ((tab[i] % 2) == 0)
    {
         tab[i]=b[i];
    }
    else 
    {
         tab[i]=a[i];
    } 
    
    
   sumaA += a[i];
   sumaB += b[i];  
}

cout << "Podaj wartosc X: ";
cin >> x;

cout << a[1] << "\n" << b[1] << "\n";
cout << "Wartosci bez dodanego X: " 
     << sumaA << "\t" << sumaB << "\n";

sumaA = 0;
sumaB = 0;
 
for (i = 0; i < 10; i++)
{
 a[i]=a[i]+x;
 b[i]=b[i]+x;
 sumaA += a[i];
 sumaB += b[i];  
}
cout << "Po dodaniu X do kazdej wartosci otrzymujemy: "
     << sumaA << "\t" << sumaB << "\n";
     
cout << "A o to liczy parzyste!" << "\n";
for (i = 0; i < 10; i++)
{
cout << a[i] << "\n";  
}


system("Pause");
    

    
}
      

Dodałem tam pare linijek w celu sprawdzenia jakie liczby bez są bez x itp. Najbardziej błędna(?) jest pierwsza pętla jak sądzę, ale gdzie?
Po skompilowaniu tego, nie dostaje żadnego błedu jednak, sama funkcja rand daje mi dziwne wartości od -1 poprzez jakieś olbrzymi i powtórzenie wartości gdzie jest wpisany x.
Byłbym bardzo wdzięczny za wskazówki i pomoc: )

1

Miało być chyba b[i] = tab[i] i a[i] = tab[i] zamiast odwrotnie

0

Cholera jasna.. fakt..a jeszcze to poprawiałem gdy nie miałem całego kodu.. Wieczorem poprawiam i zrobię bardziej przyjazną wersje. Prawdopodobnie to rozwiąże problem gdyż wersją jaką musze dać w pascal działa mi po zmienieniu tylko tego(jakby ktoś pytał..piszę sobie w c++ tako żeby tu się nauczyć a aktualnie mamy pascala więc tak oddaje). Dziękuje: )

edit: jednak chyba nie..co z dziwnymi wartościami od rand? niestety dalej je dostaje o ile dobrze mam:/

0

Czemu odczytujesz liczb 10, skoro nie wiadomo, czy wszystkie mają w sobie liczby, a czy nie mają przypadkiem śmieci? Przecież nie zawsze będzie liczba parzysta,więc pewnie w a[] bedzie 3 liczb, 5 czy 7. I to nie poustawionych pokolei!

0
Macron napisał(a)

Czemu odczytujesz liczb 10, skoro nie wiadomo, czy wszystkie mają w sobie liczby, a czy nie mają przypadkiem śmieci? Przecież nie zawsze będzie liczba parzysta,więc pewnie w a[] bedzie 3 liczb, 5 czy 7. I to nie poustawionych pokolei!

okej. wypisałem to troche inaczej..faktycznie..jest 10 liczb z tego zakresu reszta to śmieci nie wiadomo skąd -1 lub jakies 9529529. na razie zastosuje sprawdzanie czy liczba w a[i] jest z przedziału 1-100, jest prostsza metoda niż ten warunek czy dana wartośc w tablicy nie jest niechcianym "śmieciem" lub dodać wcześniej, że jeśli wartość wrzucane jest do tablicy przystych to do nieparzystych wrzuca 0? i tak zależnie jaka jest liczba.

dziękuje:)

edit: po poprawce z wypełnianiem tablicy zerami na starcie(bardzo ciekawa opcja, przeoczyłem ją w symfonii..jeszcze powtarzać będę) kod wygląda tak:


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


/* Program losuje 10 liczb i zapisuje je do tablicy tab
jeżeli parzyste to wpisuje do tablicy b, jeżeli nieparzyste to wypisujemy do tablicy a

- podajemy liczbę x
-sumujemy wartość w tablicy a i w tablicy b, do każdej wartości w tablicy dodajemy liczbę x.
- wypisujemy na ekranie wszystkie liczby parzyste*/
/*********************************************************************/
main()
{
srand((unsigned)time(0)); 
int x,i;
int tab[10];
int a[10]={0};
int b[10]={0};
int parzyste[10];
int sumaA = 0, sumaB=0;



for (i = 0; i < 10; i++)
{   tab[i] = (rand()%29)+1;   
    if ((tab[i] % 2) == 0)
    {
         b[i]=tab[i];
    }
    else 
    {
         a[i]= tab[i];
    } 
    
    
   sumaA += a[i];
   sumaB += b[i];  
}

cout << "Podaj wartosc X do dodania: ";
cin >> x;

for (i = 0; i < 10; i++)
{
 parzyste[i]=b[i];
}  

sumaA = 0;
sumaB = 0;
for (i = 0; i < 10; i++)
{
  if (a[i] != 0){
     a[i] = a[i]+x;
  } 
  else { b[i]=b[i]+x;}
  
sumaA+=a[i];
sumaB+=b[i];  
}
     
cout << "Po zsumuwaniu abu tablic otrzymujemy: " << sumaA+sumaB << "\n\n\n\n";

cout << "To sa liczy parzyste!" << "\n";
for (i = 0; i < 10; i++)
{ if (parzyste[i] != 0){
  cout << parzyste[i] << "\n";
  }
}


system("Pause");   
}
      
/*****************************************************************/

Działa pięknie, pozdrawiam : ) Może ktoś w przyszłości skorzysta :)

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