Liczby pierwsze z zakresu – return jeden dla liczby pierwszej, return 0 dla innych

Odpowiedz Nowy wątek
2018-11-08 20:42
0

Mój problem polega na tym, że jeśli liczby są pierwsze to return jest 1, natomiast dla innych jest to return 0. Zrobiłem to w taki sposób

#include <stdio.h>
#include <conio.h>
int czyPierwsza(int liczba)
{
int i, j, n, n2, p;
printf("Podaj zakres: ");
    scanf("%d" "%d", &n, &n2);
    for(i = n; i <= n2; ++i)
    {
        p = 1;
        for(j = 2; j < i; ++j)
            if(i % j == 0)
            {
                p = 0;
                break;
            }
            {
        if(p)
    return 1;
    else return 0;
 
        }
    }
    }
    int main(void)
{
    int suma;
    suma=czyPierwsza(1);
    printf("%d", suma);
}

Wiem, że ten printf czyta tylko 1, ale nie wiem jak mam zrobić to inaczej. Musi to być oznaczone jedynką i int main musi czytać funkcje czyPierwsza. Mógłby ktoś jakoś wyjaśnić jak to zrobić?

edytowany 1x, ostatnio: furious programming, 2018-11-08 20:53
Sformatuj ten kod porządnie - przecież na to nie da się patrzeć. - Patryk27 2018-11-08 20:43

Pozostało 580 znaków

2018-11-08 20:52
2

Nie rozumiem, o co pytasz…. printf niczego nie czyta, on wyświetla sformatowany tekst na ekran. Jeśli chcesz pobrać dane, to służy do tego scanf z rodziną.

A, za każdym razem, jak ktoś załącza w programie conio.h, to gdzieś na świecie umiera mały kotek. Dbajmy o kotki!

Pozostało 580 znaków

2018-11-08 20:55
0

Na temat:

Nie rozumiem, w czym problem? Tj. nie rozumiem nawet, co chcesz zrobić?

Funckja czyPierwsza ma sprawdzać czy pojedyncza liczba jest pierwsza czy też czy wszystkie liczby z zakresu są pierwsze?

Podajesz tej funkcji pojedynczą liczbę jako argument, czyli tak jakbyś chciał robić to pierwsze. Ale funkcja ignoruje ten argument, sama prosi użytkownika o ZAKRES i sprawdza cały zakres.

Czym ma też być suma?

Poza tematem:

Po co dołączasz conio.h skoro z niego nie korzystasz?

Pozostało 580 znaków

2018-11-08 20:58
0

Chcę, aby funkcja czyPierwsza sprawdziła te 2 liczby i następnie int main przywołał tę funkcje i wyświetlił liczby, które są pierwsze (dodatkowo liczby pierwsze mają mieć return 1) conio.h napisałem z nawyku, bo do tej pory prawie cały czas był używany jak miałem pisać coś innego.

Dla sprawdzenia 1 liczby czy jest pierwsza w tej funkcji i później wrzucenia tego do int maina dla zakresu całkowicie nie wiedziałbym jak mam to zrobić, więc zrobiłem tak...

edytowany 1x, ostatnio: klonstoper, 2018-11-08 21:00

Pozostało 580 znaków

2018-11-08 21:00
0

Eh? Funkcja czyPierwsza musi sprawdzać cały zakres na raz ale musisz coś zwrócić dla każdej liczby z zakresu?

Coś tu zgrzyta, czy ty aby nie musisz zwrócić tablicy?

Czy mógłbyś dać pełną treść zadania?

EDIT: Przepraszam: nie zakres, ani nie jedną liczbę, ale 2 liczby? Naprawdę nic już nie rozumiem i jeszcze raz proszę o treść zadania :)

edytowany 1x, ostatnio: kmph, 2018-11-08 21:01

Pozostało 580 znaków

2018-11-08 21:01
0

Napisz program, który wyświetla wszystkie liczby pierwsze w zadanym przedziale. Sprawdzanie, czy dana
liczba jest liczbą pierwszą zamknij w oddzielnej funkcji:
int czyPierwsza(int liczba)
Funkcja pobiera jeden parametr typu całkowitego (liczbę do sprawdzenia) i zwraca jedną liczbę całkowitą oznaczającą:

▪ wartość 1: to jest liczba pierwsza,
▪ wartość 0: to nie jest liczba pierwsza.

//Wiem, że funkcja jest źle, bo pobiera 2 liczby, ale nie wiem jak mam to zrobić dla 1 liczby, a później przekształcić to na zakres.

edytowany 2x, ostatnio: furious programming, 2018-11-08 22:01

Pozostało 580 znaków

2018-11-08 21:02
1
klonstoper napisał(a):

Chcę, aby funkcja czyPierwsza sprawdziła te 2 liczby […]

Które dwie liczby?

conio.h napisałem z nawyku, bo do tej pory prawie cały czas był używany jak miałem pisać coś innego.

Biedne kotki…

Dla sprawdzenia 1 liczby czy jest pierwsza w tej funkcji i później wrzucenia tego do int maina dla zakresu całkowicie nie wiedziałbym jak mam to zrobić, więc zrobiłem tak...

Jak chcesz sprawdzić więcej niż jedną liczbę, to wywołaj funkcję sprawdzającą więcej niż jeden raz, po kolei na każdej, którą chcesz sprawdzić.

(no, w „prawdziwym” programie by było pewnie jakieś spamiętywanie czy coś, ale to już wyższa szkoła jazdy na kucyku)

edytowany 1x, ostatnio: Althorion, 2018-11-08 21:03
Co do kotków, to nie rozumiem: stdlib nie udostępnia całej funkcjonalności z conio.h, więc nie wszystko da się zrobić bez conio.h? Czemu więc to zawsze jest zuo? - kmph 2018-11-08 21:10
Znaczy, czy jest jakaś bezpieczna dla kotków alternatywa dla conio.h na Windowsie? Pewnie jest, ale nie wiem, więc się pytam :) Qt może? (ale QT to C++ nie C?) - kmph 2018-11-08 21:11
Bo to ponad trzydziestoletnia, nieustandaryzowana biblioteka, która nie jest dostępna na wielu platformach (w szczególności na wbudowanych, gdzie C króluje). A jeśli chodzi o to, czym ją zastąpić, pytanie brzmi w czym? Do bezpośrednich manipulacji terminalem najlepsze będzie zazwyczaj ncurses, ale wszystko zależy od tego, co konkretnie robisz. - Althorion 2018-11-08 21:14
OK dzięki - kmph 2018-11-08 21:17

Pozostało 580 znaków

2018-11-08 21:04
2

Ah. To funkcja czyPierwsza ma sprawdzać JEDNĄ liczbę, a nie cały zakres, tak jak to napisałeś.

Pętla przerabiająca zakres leci do maina. W mainie wywołujesz funkcję czyPierwsza osobno dla każdej liczby,

Pozostało 580 znaków

2018-11-08 21:26
0

Przerobiłem to do takiej postaci, jednak dalej jest błędnie.

#include <stdio.h>
int czyPierwsza(int liczba)
{
int i, j, p;
    for(i = 2; i <= liczba; ++i)
    {
        p = 1;
        for(j = 2; j < i; ++j)
            if(i % j == 0)
            {
                p = 0;
                break;
            }
            {
        if(p)
    return 1;
    else return 0;
        }
    }
    }
    int main(void)
{
    int suma, liczba1, liczba2, suma2;
    printf("Podaj zakres: ");
    scanf("%d" "%d", &liczba1, &liczba2);
        suma=czyPierwsza(liczba1);
    suma2=czyPierwsza(liczba2);
    printf("%d" "%d", suma, suma2);
}
edytowany 1x, ostatnio: furious programming, 2018-11-08 22:01

Pozostało 580 znaków

2018-11-08 21:29
0

Dlaczego pętla przebiegająca po zakresie dalej jest w funkcji czyPierwsza?

Wybacz za pytanie, ale czy wiesz, jak działa pętla for?

edytowany 1x, ostatnio: kmph, 2018-11-08 21:32

Pozostało 580 znaków

2018-11-08 21:31
0

Ano jest. Ty chcesz puścić pętlę po zadanym zakresie i zliczać wszystkie liczby pierwsze — czyli ustawić sobie zmienną suma na zero i potem do niej dodawać wartości funkcji czyPierwsza, bo tak się szczęśliwie składa, że zwraca ona 1 dla pierwszych.

A z cyklu „bezużyteczne ciekawostki” — jak mi na studiach kazali, cytuję, „napisać funkcję, która dla liczb pierwszych zwróci 1”, to prowadzący z jakiegoś powodu nie był zachwycony moją funkcją int primeTest(unsigned int n) {return 1;}… A przecież robiła dokładnie to, co w poleceniu! - Althorion 2018-11-08 21:33

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0