Skocz do zawartości


Zdjęcie

[C++] Problem z funkcją


4 odpowiedzi w tym temacie

#1 trisi

trisi

    Początkujący

  • Użytkownik
  • 4 postów

Napisano 2012.03.06, 19:01

Witam,
mam problem z funkcjami w c++, a właściwie z jedną, nie wiem dlaczego funkcja NWD nie działa mi prawidłowo,
załączam do tego kod, jeżeli ktoś zna się na programowaniu i widzi gdzie jest błąd to proszę o pomoc :)
#include <cstdlib>
#include <iostream>
#include <time.h>
#include <conio.h>
#include<cmath>
using namespace std;

void tablica (int tab[],int k); 
int suma (int j,int d, int s);
int liczba_pierwsza (int sum);
void wypisz (int tab[], int k);
int NWD (int a, int b);
int main(int argc, char *argv[])
{   
    int k;
    cout<<"podaj dlugosc ciagu "<<endl;
    cin>>k;
    int tbl [k];
    
    
    srand((unsigned)time(NULL));
    
tablica (tbl,k);    
wypisz (tbl,k);
cout<<endl<<endl;
 for(int i=0;i<2;i++)
{
int x,y;
x=rand()%k;
y=tbl[x];
cout<<tbl[x]<<" ";

 cout<<NWD(x,y)<<" "<<endl;
 }
    system("PAUSE");
    return EXIT_SUCCESS;
}

void tablica (int tab[],int k)
{ 
     int s=0;
     int d=0;
     int j=0;
     
for (int i=0; i<k; i++)
{ 
    do {
       do {   
       tab [i]=rand()%899+100;
       j=tab[i]%10;
       d=(tab[i]/10)%10;
       s=tab[i]/100;      
       } while (liczba_pierwsza(suma(j,d,s))==0);
       } while (tab[i]%2==0);
       
}
}

int suma (int j,int d, int s)
{
    int sum;
    sum=s+d+j;
return sum;
}
 
int liczba_pierwsza (int sum)
{
    int licz=0;
    for (int j=2; j<=sum/2; j++)
    {
        if ( sum%j==0) {licz++;}
    }
if (licz>0) {return 0;}
if (licz=0) {return 1;}
}
    
void wypisz (int tab[], int k)
{
     for (int i=0;i<k;i++)
     {
         cout<<tab[i]<<" ";
     }
}       
     
int NWD (int a, int b)
{
    int c;
    while (b != 0)
    {
          c = a % b;
          a = b;
          b = c;
 
    }
    return a;
}


#2 stivo

stivo

    mgr inż.

  • Moderator
  • 2184 postów

Napisano 2012.03.06, 19:53

Co to znaczy nie działa prawidłowo?
Jakiś wynik zwraca? Dla jakichś przykładowych danych?

#3 trisi

trisi

    Początkujący

  • Użytkownik
  • 4 postów

Napisano 2012.03.06, 20:10

funkcja zamiast liczyć NWD dla dwóch liczb liczy dla każdej oddzielnie
w załączniku jest wynik programu

Załączone miniatury

  • Bez tytułu.png


#4 stivo

stivo

    mgr inż.

  • Moderator
  • 2184 postów

Napisano 2012.03.06, 21:29

O ile dobrze zrozumiałem kod, to w tej części:
for(int i=0;i<2;i++)
{
int x,y;
x=rand()%k;
y=tbl[x];
cout<<tbl[x]<<" ";

 cout<<NWD(x,y)<<" "<<endl;
 }
losujesz sobie dwie liczby z tbl[k], i tu jest właśnie mankament, bo x jest w tym miejscu pozycją liczby w tbl[k], a y wartością z pod tej pozycji. I dwa razy przekazujesz do funkcji NWD pozycję i wartość. A powinieneś przekazać dwie wartości, więc na chwilę obecną jednak pozbyłbym się tej pętli i zrobił mniej więcej tak:
int x1,y1,x2,y2;
x1=rand()%k;
y1=tbl[x1];
//cout<<"x1 = "<<x1<<" y1 = "<<y1<<endl;
//cout<<tbl[x1]<<" ";

x2=rand()%k;
y2=tbl[x2];
//cout<<"x2 = "<<x2<<" y2 = "<<y2<<endl;
//cout<<tbl[x2]<<" ";

 cout<<"NWD dla "<<y1<<" i "<<y2<<" = "<<NWD(y1,y2)<<" "<<endl;
PS. Zostawiam komentarze, może Ci się przydadzą.

#5 trisi

trisi

    Początkujący

  • Użytkownik
  • 4 postów

Napisano 2012.03.07, 12:39

Bardzo dziękuję za odpowiedź program działa już prawidłowo :)



Dodaj odpowiedź



  


Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych