dj_tej Opublikowano 12 Marca 2007 Zgłoś Opublikowano 12 Marca 2007 mam pewien problem z tym programem do obliczania liczb pierwszych metoda sita.... daje wartosc zmiennej wieksza niz 9 i program sie wysypuje... oto kod: #include <stdio.h> #include <conio.h>int main () { int N; int x, i, k=0, t[N+1], t2[2]={2, 3, 5}; printf("\nProgram wyznacza liczby pierwsze do podanej granicy"); printf("\nPodaj gorna granice:\n"); printf("N="); scanf("%d",&N); for(i=0; i<=N; i++) t[i]=1;for (i=2; i<=N; i++){ if(i%t2[k]==0) { t[i]=0; k++; }}for (i=2; i<=N; i++) { if (tab1[i]>0) printf(" %d ", i); }getch();return 0; } dzieki z gory za pomoc Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
jezol Opublikowano 12 Marca 2007 Zgłoś Opublikowano 12 Marca 2007 (edytowane) Witam Co prawda slabo sie znam na programowaniu ale wydaje mi sie ze zle deklarujesz zmienne. Dlatego ze w momecie deklaracji program nie zna N, skoro nie zna N to jak moze dobrze zadeklarowac t[N] ?? Jest jeszce jeden problem. Twoj algorytm wytnie 2, 3 i 5 a tez to sa liczby pierwsze. Pozatym Twoj algorytm sprawdza jedynie %2 dlatego ze if to nie jest petla i nie zwieksza K. Powinno chyab byc tak: for (i=2; i<=N; i++){ for (k=0; k<=2; k++) if((i%t2[k])==0) { t[i]=0; }} Edytowane 12 Marca 2007 przez jezol Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dj_tej Opublikowano 12 Marca 2007 Zgłoś Opublikowano 12 Marca 2007 jezol z towimi poprawkami tak czy inaczej program sie wysypuje... a co do deklaracji zmeinnych to wydaje mi sie ze to jest poprawny zapis... wczesniej tez tak deklarowalem zmeinne i nie byl oz tym problemow wiec sadze ze to nie to Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
jezol Opublikowano 12 Marca 2007 Zgłoś Opublikowano 12 Marca 2007 (edytowane) A to ciekawe czemu sie wysypuje. Ogolnie u mnie jak wkleilem Twoj kod to w ogole nie chcial sie skompilowac. Uzywam Dev-c++. Gdy ustawilem na sztywno wielkosc tablicy to sie kompiluje. Jeszcze sie nie chcial skompilowac bo gdzies bylo Tab1 a nie zadeklarowales takiej tablicy. Wklejam kod ktory u mnie dziala. #include <stdio.h> #include <conio.h>int main () { int N,i,k; int t[10000];int t2[3]={2, 3,5};printf("\nProgram wyznacza liczby pierwsze do podanej granicy"); printf("\nPodaj gorna granice:\n"); printf("N="); scanf("%d",&N); for (i=0; i<=N; i++) t[i]=1;for (i=2; i<=N; i++){ for (k=0; k<=2; k++) if((i%t2[k])==0) { t[i]=0; }}t[0]=0;t[1]=0;t[2]=1;t[3]=1;t[5]=1;for (i=0; i<=N; i++) if (t[i]!=0) printf("%d-%d \n", i,t[i]);getch();return 0; } Program wypisuje kazda liczbe w nowej lini. I po "-" sa jedynki jako ze w tablicy sa wartosci 1. Zrobilem to kontrolnie bo przez jakis czas mialem jakies smieci zamiast ostatniej liczby. teraz jest wszystko si. tylko rozwiazanie 2,3 i 5 troche zrobione na odczepne, ale dziala. Pozdrawiam Edytowane 12 Marca 2007 przez jezol Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dj_tej Opublikowano 12 Marca 2007 Zgłoś Opublikowano 12 Marca 2007 tez uzywam dev cpp... zmienialem nazwe tablicy i gdzies przeoczylem dlatego nie byla zdeklarowana... a co do rozmiaru tablicy to nie bede sie klocil bo jestem poczatkujacy puki co ;) dzieki wielkie za pomoc :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kfgz Opublikowano 12 Marca 2007 Zgłoś Opublikowano 12 Marca 2007 (edytowane) Algorytm może się kończyć wcześniej tj. dla N = sqrt(N) pod warunkiem, że wykosi się wielokrotności 2. #pragma hdrstop#include <stdio.h>#include <conio.h>#include <math.h>#define Step 2#pragma argsusedint key(){ printf("\n\nNacisnij dowolny klawisz!"); getch(); return 0;}int main(int argc, char **argv){ int Ru = 100, Rl = 0; printf("Podaj dolny zakres: "); scanf("%d", &Rl); printf("Podaj gorny zakres: "); scanf("%d", &Ru); Ru++; if (Rl > Ru || Rl < 0 || Ru < 1) { printf("\n\nNieprawidlowy zakres!!!\n\n"); key(); return 0; } printf("\nZakres: %d - %d\n\n", Rl, Ru - 1); char *P; P = new char[Ru]; if (NULL != P) { printf("Poczatek algorytmu...\n\n"); unsigned int I, Number, F = (int)(sqrt(Ru - 1)); P[0] = 0; P[1] = 0; P[2] = 1; for (I = 3; I < Ru; I += Step) P[I] = 1; for (I = 4; I < Ru; I += Step) P[I] = 0; for (I = 3; I <= F; I += Step) for (Number = I * I; Number < Ru; Number += Step * I) if (P[Number]) P[Number] = 0; printf("Koniec algorytmu...\n\n"); unsigned int Count = 0; for (I = Rl; I < Ru; I++) if (P[I]) Count++; printf("Znaleziono: %d\n\n", Count); if (Count) { printf("Wypisac liczby pierwsze (0 = Nie)? "); int d; scanf("%d", &d); if (d) { printf("\n\n"); for (I = Rl, Number = 1; I < Ru; I++) if (P[I]) {printf("#%d: %d\n", Number, I); Number++;} } } } key(); return 0;} Edytowane 12 Marca 2007 przez Dj_AnT Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Sid Opublikowano 13 Marca 2007 Zgłoś Opublikowano 13 Marca 2007 A od siebie dodam deklaracja tablicy n-elementowej: int n;int *tablica;[pobieramy tu n, np scanfem]tablica=malloc(n*sizeof(int)); Mogłem coś troszkę pomieszać z głowy pisałem a nie mam jak sprawdzić. W każdym razie należy użyć malloc() ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kaspertk Opublikowano 27 Czerwca 2009 Zgłoś Opublikowano 27 Czerwca 2009 (edytowane) Ja musze zrobić podobny program, do tego tylko ma obliczać liczby doskonałe mój algorytm wygląda tak: #include<iostream> #include<cmath> using namespace std; long long int N, Np, a, s; int main() { cout << "Liczba: "; cin>>N; Np = N/2; for(a=1; a <= Np; a++){ if (!(N%a)) s+=a; } if(s==N)cout<<"Yes"; else cout<<"No"; cin.ignore(); getchar(); }Ale nie wiem jak napisać lub połaczyć to z tym programem aby użytkownik wpisał dolną i górną granice przedziału a program wypisał które liczby z przedziału sę doskonałymi. Jeśli ktoś zechcę pomóc niech napisze. Edytowane 27 Czerwca 2009 przez kaspertk Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...