• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prosty program wypisujący dla danej liczby czy jest pierwsza

VPS Starter Arubacloud
0 głosów
480 wizyt
pytanie zadane 3 lutego 2017 w C i C++ przez warior1 Użytkownik (520 p.)

(Język C)Wykonałem program który powinien pokazać dla n liczb czy są pierwsze czy też nie . Niestety popełniłem jakiś błąd bo program po jednokrotnym przejściu pętli się kończy.Czy wiecie jak zmienić program aby wypisywał tak lub nie dla każdej wprowadzonej liczby ? Jakieś sugestie ?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,n,p,liczba[4];
    p=2;
    printf("Podaj ilosc liczb do wypisania ");
    scanf("%d",&n);
    for  (i=0;i<n;i++)
        {
   printf("Podaj licbe wieksza od 2 ");
   scanf("%d",&liczba[0]);
   if(liczba[0]<2){printf("NIE");}
   for (i=0;i<n;i++){
   if(liczba[0]==p ){printf("TAK");}
    else if(liczba[0]%p==0){printf("NIE");}
    p=p+1;
    }
    return 0;
}
}

 

4 odpowiedzi

0 głosów
odpowiedź 3 lutego 2017 przez 10kw10 Pasjonat (22,880 p.)
edycja 3 lutego 2017 przez 10kw10

Nie znam sie na c ale czy tu nie powinno byc:


scanf("%d",&liczba[i]);

 

 

komentarz 4 lutego 2017 przez warior1 Użytkownik (520 p.)
Mój program potrzebuje wczytać tylko 3 liczby wiec chyba liczba[4] wystarczy
komentarz 4 lutego 2017 przez 10kw10 Pasjonat (22,880 p.)
Chcesz zeby mozna bylo podac wszystkie a potem wypisac czy dana jest pierwsza, czy od razu po podaniu ma wypisac wynik ?

Jesli ta druga opcja to nie potrzebna ci tablica, troche sie gubie gdzie sie te petle koncza ale jesli sa zagniezdzone(jedna w drugiej) to masz 2 razy ten sam iterator. Jesli w if jest tylko jedna instrukcja to nie potrzebne ci sa klamry.
0 głosów
odpowiedź 3 lutego 2017 przez Evelek Nałogowiec (28,960 p.)
Masz 2 klamerki poza funkcją main(). Przerzuć jedną z nich przed wiersz z return 0;.
komentarz 4 lutego 2017 przez warior1 Użytkownik (520 p.)
Zmieniłem ale dalej działa źle
0 głosów
odpowiedź 5 lutego 2017 przez Mikołaj Kawczynski Dyskutant (9,160 p.)
Wypisz n przed przejechaniem pętli i przy każdym przejechaniu. Apropo twój program jest strasznie niewydajny bo dzielnik nie może być większy niż 1/2 liczby więc jak masz 10 to dzielnik może być maks 5 jak 20 to maks 10. Wieć powinieneś to 1/2 n liczyć połowa mniej sprawdzania ;)
komentarz 5 lutego 2017 przez koczurekk Gaduła (3,420 p.)
Twój algorytm też jest masakrycznie wolny, dalej masz złożoność liniową. Dzielnik nie może być większy od pierwiastka kwadratowego danej liczby. I nie trzeba sprawdzać wszystkich po drodze - tylko nieparzyste + uprzednie sprawdzenie czy modulo 2 =/= 0.
komentarz 5 lutego 2017 przez niezalogowany
Myślisz, że sprawdzenie modulo 2 != 0 za każdym razem będzie wydajniejsze niż skreślenie parzystych w pierwszym przelocie sita?
komentarz 5 lutego 2017 przez koczurekk Gaduła (3,420 p.)
Gdzie ty tu widzisz sito? To dyskusja o sprawdzeniu pętlą czy liczba ma dzielniki. Jakiekolwiek sito to ewidentnie nie poziom autora pytania.
komentarz 5 lutego 2017 przez niezalogowany
A on nie pisze sita? Wydawało mi się, że sito robi. Program dziwnie formatowany, nie chciało mi się analizować. Znalazłem return w miejscu od czapy, to powiedziałem, bo pytał, czemu mu się wyłącza przy 1 przebiegu. Widzę pętlę w pętli, to myślałem, że to sito.
komentarz 5 lutego 2017 przez koczurekk Gaduła (3,420 p.)
Nope, z tego co widzę próbuje sprawdzić pierwszość 4 liczb. W każdym razie do tego dużo bliżej temu czemuś niż do sita.
–1 głos
odpowiedź 5 lutego 2017 przez niezalogowany
Bez analizowania sensowności programu, bo mi się nie chce, to masz return 0 w pętli. Więc ta pętla się skończy po 1 przebiegu, bo return z niej wychodzi.

Formatuj właściwie kod (W CodeBlocks możesz wybrać PKM –> format as AStyle), bo na razie masz dziką kaszanę i sam nie widzisz co w czym lata.

Podobne pytania

0 głosów
3 odpowiedzi 3,276 wizyt
0 głosów
1 odpowiedź 304 wizyt
pytanie zadane 13 listopada 2019 w C i C++ przez adeptc Nowicjusz (160 p.)
0 głosów
1 odpowiedź 1,456 wizyt
pytanie zadane 23 października 2018 w C i C++ przez jednorożec Nowicjusz (220 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...