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

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ć?

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!

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?

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...

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 :)

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.

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)

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,

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);
}
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?

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