Liczby pierwsze
Ostatnio zmodyfikowano 2015-03-22 21:58
Pietia Temat założony przez niniejszego użytkownika |
Liczby pierwsze » 2015-03-22 13:56:44 Mam zrobić program, który sumuje liczby mniejsze od n w jednej funkcji i w drugiej sumuje liczby pierwsze mniejsze od n, napisałem warunek dla liczb pierwszych w funkc2 ale nie gra, co robię źle? # include <stdio.h>
int funkc1( unsigned * n ); int funkc2( unsigned x );
main() { unsigned n; printf( "Podaj liczbe n\n" ); scanf( "%d", & n ); printf( "Suma liczb mniejszych od n to %d\n", funkc1( & n ) ); printf( "Suma liczb pierwszych do n to %d\n", funkc2( n ) ); }
int funkc1( unsigned * n ) { int i, licz = 0; for( i = 0; i <* n; i++ ) { licz += i; } * n = licz; return licz; }
int funkc2( unsigned x ) { double i = 2, j = 2, k = 0; for( i; i < x; i++ ) { do { k += i; j++; } while(( i / j ) != 1.00 ); } return k; }
|
|
Esteban |
» 2015-03-22 14:25:27 Pętla do{ } while(i/j)
i oraz j mają taką samą wartość na początku, jeżeli będziesz zwiększał j to ciągle będziesz otrzymywał ułamek, przez co warunek while nigdy nie zwróci wartości fałsz |
|
Pietia Temat założony przez niniejszego użytkownika |
» 2015-03-22 15:09:25 A teraz? TO nie jest tak, że pętla wewnętrzna za każdym razem będzie się robić x razy na jedno wykonanie pętli wewnętrznej? Bo już nie wiem jak do tego podejść, jeśli jest tak jak piszę to powinno być dobrze ale nie jest: # include <stdio.h>
int funkc1( unsigned * n ); int funkc2( unsigned x );
main() { unsigned n; printf( "Podaj liczbe n\n" ); scanf( "%d", & n ); printf( "Suma liczb mniejszych od n to %d\n", funkc1( & n ) ); printf( "Suma liczb pierwszych do n to %d\n", funkc2( n ) ); }
int funkc1( unsigned * n ) { int i, licz = 0; for( i = 0; i <* n; i++ ) { licz += i; } * n = licz; return licz; }
int funkc2( unsigned x ) { int i = 2, j = 2, k = 0; for( i; i <= x; i++ ) { for( j; j < x; j++ ) { if(( i % j ) == 0 ) { k += i; } } } return k; }
|
|
Esteban |
» 2015-03-22 17:46:35 Dobrze kombinujesz uwagi Do funkcji nr2 przechodzi już zmieniony/przerobiony i przemielony argument z funkcji nr1 (zakładam z zadania, że tak nie miało być) Liczby które używasz w pętli for lepiej deklaruj na początku jej np for( int i = 2; i <= x; i++ ) Trzeba poprawić warunek if(( i % j ) == 0 ) { k += i; } Teraz robisz, że kiedy liczba jest podzielna przez te wszystkie liczby j to warunek się wykonuje Tymczasem nasza liczba pierwsza ,,i" może tyko raz być podzielna (przez samą siebie) (też przez liczbę 1, ale to sprytnie pominąłeś) #include <stdio.h> #include <iostream>
int funkc1( unsigned * n ); int funkc2( unsigned x );
main() { unsigned n; printf( "Podaj liczbe n\n" ); scanf( "%d", & n ); int z = n; printf( "Suma liczb mniejszych od n to %d\n", funkc1( & n ) ); printf( "Suma liczb pierwszych do n to %d\n", funkc2( z ) ); }
int funkc1( unsigned * n ) { int i, licz = 0; for( i = 0; i <* n; i++ ) { licz += i; } * n = licz; return licz; }
int funkc2( unsigned x ) { int k = 0, warunek; for( int i = 2; i <= x; i++ ) { warunek = 0; for( int j = 2; j <= x; j++ ) { if(( i % j ) == 0 ) warunek++; } if( warunek == 1 ) k += i; } return k; }
|
|
Pietia Temat założony przez niniejszego użytkownika |
» 2015-03-22 21:58:16 Dzięki wielkie, bardzo mi pomogłeś:-) Dobry patent z tym warunkiem. |
|
« 1 » |