Dopiero zaczynam i nie wiem jak to dokładnie napisać w języku C.
Zbadać za pomocą odpowiedniego programu (tylko dla liczb w podanym przedziale z zakresu integer) prawdziwość twierdzenia, że jeśli suma cyfr na nieparzystych pozycjach (od prawej) jest równa sumie cyfr na pozycjach parzystych to dana liczba naturalna n jest podzielna przez 11.
Dodaje algorytm
Najbardziej łopatologicznie: zamień sobie integera na tablicę znaków za pomocą sprintfa i potem tylko od ich wartości poodejmuj '0'
, w ten sposób otrzymasz tablicę cyfr.
Napisałem coś takiego. Nie ma możliwości chyba, aby suma cyfr parzystych i nieparzystych była sobie równa.
int main()
{
int liczba,a,b;
puts("Podaj liczbe");
scanf ("%d %d", &a, &b);
int sumaPar=0,sumaNiepar=0;
liczba=a;
while(liczba<=b)
{
if((liczba % 2) == 0)
{
sumaPar+=liczba;
}
else
{
sumaNiepar+=liczba;
}
liczba++;
}
if(sumaPar==sumaNiepar)
puts("Podzielna przez 11");
else
printf("Niepodzielna");
return 0;
}
Jeśli podasz 1 i 3. To masz Nieparzyste 1+3=4 i parzystą tylko 2
W tym algorytmie (schemacie blokowym) który podałeś masz błąd. Tam powinno być:
parz+=liczba%10;
liczba1=liczba1/10;
nieparz+=liczba1%10;
liczba1=liczba1/10;
Jak rozumiem przykładowy output z programu ma wyglądać mniej więcej tak:
Wprowadz dwie liczby:
pierwsza liczba: 120
druga liczba: 124
Liczba 120:
suma cyfr na miejscach parzystych: 2
suma cyfr na miejscach nieparzystych: 1
Wniosek: niepodzielna przez 11
Liczba 121:
suma cyfr na miejscach parzystych: 2
suma cyfr na miejscach nieparzystych: 2
Wniosek: PODZIELNA przez 11
Liczba 122:
suma cyfr na miejscach parzystych: 2
suma cyfr na miejscach nieparzystych: 3
Wniosek: niepodzielna przez 11
Liczba 123:
suma cyfr na miejscach parzystych: 2
suma cyfr na miejscach nieparzystych: 4
Wniosek: niepodzielna przez 11
Liczba 124:
suma cyfr na miejscach parzystych: 2
suma cyfr na miejscach nieparzystych: 5
Wniosek: niepodzielna przez 11
Delor napisał(a):
W tym algorytmie (schemacie blokowym) który podałeś masz błąd. Tam powinno być:
parz+=liczba%10; liczba1=liczba1/10; nieparz+=liczba1%10; liczba1=liczba1/10;
Jak rozumiem przykładowy output z programu ma wyglądać mniej więcej tak:
Wprowadz dwie liczby: pierwsza liczba: 120 druga liczba: 124 Liczba 120: suma cyfr na miejscach parzystych: 2 suma cyfr na miejscach nieparzystych: 1 Wniosek: niepodzielna przez 11 Liczba 121: suma cyfr na miejscach parzystych: 2 suma cyfr na miejscach nieparzystych: 2 Wniosek: PODZIELNA przez 11 Liczba 122: suma cyfr na miejscach parzystych: 2 suma cyfr na miejscach nieparzystych: 3 Wniosek: niepodzielna przez 11 Liczba 123: suma cyfr na miejscach parzystych: 2 suma cyfr na miejscach nieparzystych: 4 Wniosek: niepodzielna przez 11 Liczba 124: suma cyfr na miejscach parzystych: 2 suma cyfr na miejscach nieparzystych: 5 Wniosek: niepodzielna przez 11
O coś takiego chodzi. Tylko mam problem w napisaniu tego w c z użyciem pętli while.
Nie musisz cytować całego postu jeśli odpowiadasz tuż pod nim.
int main()
{
int a, b;
int liczba;
//tu wczytanie od uzytkownika liczb a i b
...
liczba=a;
while(liczba <= b)
{
//tu wypisanie liczby,
//sprawdzenie czy jest podzielna przez 11
//wypisanie wniosków
...
liczba++;
}
}
Ogarnia ktoś o co chodzi? Program nie robi tego co powinien. Pan ma sprawdzić poprawność twierdzenia dla liczb w podanym zakresie. Proszę napisać program na podstawie wykonanego algorytmu.
#include <stdio.h>
int main()
{
int liczba1,liczba2,reszta;
puts("Wprowadz dwie liczby");
puts("Pierwsza Liczba: ");
scanf ("%d", &liczba1);
puts("Druga Liczba: ");
scanf ("%d", &liczba2);
int i;
for(i=liczba1; i<=liczba2; i=i+1)
{
printf("Liczba : %d\n", i);
int liczba=i;
int parzysta=0;
int sumaPar=0,sumaNiepar=0;
while(liczba>0)
{
reszta=liczba%10;
liczba = liczba/10;
if(parzysta==1)
{
sumaPar+=reszta;
parzysta=0;
continue;
}
if(parzysta==0)
{sumaNiepar+=reszta;
parzysta=1;
}
}
printf("suma cyfr na miejscach parzystych : %d\n", sumaPar);
printf("suma cyfr na miejscach nieparzystych : %d\n",sumaNiepar);
if(sumaPar==sumaNiepar)
puts("Wniosek: podzielna przez 11");
else
puts("Wniosek: niepodzielna przez 11");
}
return 0;
}
Na końcu pętli for:
if ((sumaPar == sumaNiepar) == (i % 11)) {
printf("Twierdzenie nieprawdziwe dla liczby: %d !\n", i);
return 1;
}
else {
printf("Twierdzenie prawdziwe dla liczby: %d.\n", i);
}
Tuż przed wyjściem z programu:
printf("Twierdzenie prawdziwe dla podanego zakresu liczb.\n");