Skocz do zawartości

Wspólne dzielniki pierwsze


PolskiFrancuz

Rekomendowane odpowiedzi

[b]Wspólne dzielniki pierwsze [/b]
Mam napisać program, który czyta dwie liczby naturalne A, B i wypisuje wszystkie liczby pierwsze, które są dzielnikami obydwu liczb. (Każdy podzielnik powinien być wypisany tylko raz i liczby wypisujemy od najmniejszej do największej.) 
Uwaga: Podany zakres (2? A, B ? 10000000) jest częścią specyfikacji algorytmy, jest również informacją o typie i zakresie jakie może wprowadzić użytkownik. Wczytaj się w warunki, znajdziesz tam podpowiedzi rozwiązywania zadania.
Na przykład dla liczb: 900 260
program powinien wypisać
2  5
Wymagania:
    Napisanie funkcji dającej odpowiedź czy dany dzielnik jest liczbą pierwszą 
    Za zwrócenie wartości w funkcji sprawdzanej wartości 
    Za wywołanie w pętli funkcji, dającej odpowiedź czy dany dzielnik jest liczbą pierwszą z uwzględnieniem podzielności obu liczb
    Prawidłowe wypisanie dzielników

 

Sprawa wygląda tak, że zupełnie nie wiem co robię źle, przesiadłem się z dev na VE2010 Expres i coś mi nie idzie :DD

 

Zacząłem robić i od razu błędy :/

Pisałem funkcje spr czy liczba jest pierwsza, ale przy spr okazuje się że coś źle zwraca :/

 

Kod:

// zadanie1.cpp : Defines the entry point for the console application.
//

#include "StdAfx.h"
#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std; 

int pierwsze(int n)
{
bool pier;
int i=2; 
while(n % i) i++; 
if (i==n) 
{pier=true;} 
else 
{pier=false;} 

return pier;
}


int main() 
{
    //sekcja spr pierwszej
int n;
cout<<"podaj liczbe: "; 
cin>>n; 

bool pier;
int pierwsze(n);
if(pier==true)
{
    cout<<"tak";
}else
{
    cout<<"nie";
}



cin.ignore();
_getch(); 
return 0;
}

Dla liczby 2 wyskakuje nie, a przecież jest liczbą pierwszą :/

Kod możecie zupełnie zmienić, bo nieograniam trochę tego :DD

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

nie przypisujesz nic do bool pier ?

 

funkcja int pierwsze(int n) powinna mieć typ bool (bo zwraca boola), natomiast, w main:

 

bool pier;
pier = pierwsze(n);
if(pier==true) {
...

 

a w ogóle to jeszcze szybciej:

if (pierwsze(n)) {
...

bez zadnego boola

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Pamiętaj, ze w trakcie działania programu, w miejsce funkcji jest jakby podstawiany jej wynik (tak to sobie wyobraź, bo wiadomo wygląda to inaczej) - zatem if(cokolwiek) zamienia sie na if(true) lub if(false) - i nie ma innych mozliwości. Zawsze, wszystko jest albo true, albo false. Wszystko musi się do tego sprowadzić. Np. if (5) to też if(true), a if (0) to if (false) itd.

Odnośnik do komentarza
Udostępnij na innych stronach

Errors:

1>------ Build started: Project: zadanie1, Configuration: Debug Win32 ------

1> zadanie1.cpp

1>c:\documents and settings\fg\moje dokumenty\visual studio 2010\projects\zadanie1\zadanie1\zadanie1.cpp(24): error C2065: 'A' : undeclared identifier

1>c:\documents and settings\fg\moje dokumenty\visual studio 2010\projects\zadanie1\zadanie1\zadanie1.cpp(24): error C2065: 'B' : undeclared identifier

1>c:\documents and settings\fg\moje dokumenty\visual studio 2010\projects\zadanie1\zadanie1\zadanie1.cpp(25): error C2448: 'dzielniki' : function-style initializer appears to be a function definition

1>c:\documents and settings\fg\moje dokumenty\visual studio 2010\projects\zadanie1\zadanie1\zadanie1.cpp(46): error C2182: 'dzielniki' : illegal use of type 'void'

1>c:\documents and settings\fg\moje dokumenty\visual studio 2010\projects\zadanie1\zadanie1\zadanie1.cpp(46): error C2078: too many initializers

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

 

Kod:

 

// zadanie1.cpp : Defines the entry point for the console application.
//

#include "StdAfx.h"
#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std; 

int pierwsze(int n)
{
bool pier;
int i=2; 
while(n % i) i++; 
if (i==n) 
{pier=true;} 
else 
{pier=false;} 

return pier;
}

void dzielniki(A,B)
{   
    while (n <= A)
          {
               
               if (A % n ==0  && B % n ==0) 
               {
                   if(pierwsze(n))
                   {
                       cout<<n<<" ";
                   }
               }   
            n++;
          }
}


int main() 
{
    int A;
    int B;
cin>>A>>B;
void dzielniki(A,B);






cin.ignore();
_getch(); 
return 0;
}

 

 

A teraz bo nie mam pomysłu :/

Odnośnik do komentarza
Udostępnij na innych stronach

a jeszcze to samo zadanie :D

Wersja Void

1>------ Build started: Project: zadanie1, Configuration: Debug Win32 ------

1> zadanie1.cpp

1>c:\documents and settings\fg\moje dokumenty\visual studio 2010\projects\zadanie1\zadanie1\zadanie1.cpp(47): error C2182: 'dzielniki' : illegal use of type 'void'

1>c:\documents and settings\fg\moje dokumenty\visual studio 2010\projects\zadanie1\zadanie1\zadanie1.cpp(47): error C2078: too many initializers

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

// zadanie1.cpp : Defines the entry point for the console application.
//

#include "StdAfx.h"
#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std; 

int pierwsze(int n)
{
bool pier;
int i=2; 
while(n % i) i++; 
if (i==n) 
{pier=true;} 
else 
{pier=false;} 

return pier;
}

void dzielniki(int A,int B)
{   
    int n=2;
    while (n <= A)
          {
               
               if (A % n ==0  && B % n ==0) 
               {
                   if(pierwsze(n))
                   {
                       cout<<n<<" ";
                   }
               }   
            n++;
          }
}


int main() 
{
    int A;
    int B;
cin>>A>>B;
void dzielniki(A,B);






cin.ignore();
_getch(); 
return 0;
}

 

Wersja Int zamiast void

1>c:\documents and settings\fg\moje dokumenty\visual studio 2010\projects\zadanie1\zadanie1\zadanie1.cpp(48): error C2078: too many initializers

// zadanie1.cpp : Defines the entry point for the console application.
//

#include "StdAfx.h"
#include <cstdlib>
#include <iostream>
#include <conio.h>

using namespace std; 

int pierwsze(int n)
{
bool pier;
int i=2; 
while(n % i) i++; 
if (i==n) 
{pier=true;} 
else 
{pier=false;} 

return pier;
}

int dzielniki(int A,int B)
{   
    int n=2;
    while (n <= A)
          {
               
               if (A % n ==0  && B % n ==0) 
               {
                   if(pierwsze(n))
                   {
                       cout<<n<<" ";
                   }
               }   
            n++;
          }
    return 0;
}


int main() 
{
    int A;
    int B;
cin>>A>>B;
int dzielniki(A,B);






cin.ignore();
_getch(); 
return 0;
}

 

 

@E: Masz pomysł co jest źle ??

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Jak używasz funkcji, to nie piszesz void dzielniki(A,B ); - tak tylko w definicji robisz... potem już bez void (typ zmiennej przed nazwą funkcji informuje program, co ona zwróci)

 

typ nazwa([typ argument]) {
}

main() {
nazwa();

typ zmienna;
zmienna = nazwa(); //typy muszą byc te same
}

Odnośnik do komentarza
Udostępnij na innych stronach

ojojoj ale ze mnie yupek :D

działa dzięki :D

 

oki:

Zadanie2:

Mam napisać program, który czyta liczbę naturalną N z zakresu od 1 do 1000000 i wypisuje największą całkowitą potęgę liczby 2, która nie jest większa od N i najmniejszą liczbę pierwszą, która jest większa od N. Liczby powinny być wypisane w jednym wierszu i oddzielone pojedynczym odstępem.

Na przykład dla liczby 12 program powinien wypisać 8 13.

Wymagania:

? Napisanie funkcji na liczbę pierwsza(zrobione)

? Odpowiedzenie na pytanie o największą potęgę całkowitą liczby 2 (nie wiem jak to zrobić :/ Ma ktoś pomysł na algorytm ??

? Wypisanie pierwszej liczby pierwszej > od podanej liczby

Odnośnik do komentarza
Udostępnij na innych stronach

? Odpowiedzenie na pytanie o największą potęgę całkowitą liczby 2 (nie wiem jak to zrobić :/ Ma ktoś pomysł na algorytm ??

#include <iostream>

using namespace std;

int main()
{
  int n;
  cout<<"Podaj N"<<endl;
  cin>>n;
  int w=1;
  while (w<=n)
  {
    w*=n;
  }
  cout<<"Najwieksza potrga calkowita liczby 2 wynosi: "<<w<<endl;
  system("pause");
  return 0;
}

Powinno działać, nie sprawdzałem.

 

? Wypisanie pierwszej liczby pierwszej > od podanej liczby

Sito eratostenesa

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...