[C++] jak to połączyć??
- refuss
- Użytkownik
- Posty: 153
- Rejestracja: 19 sty 2008, o 17:11
- Płeć: Mężczyzna
- Lokalizacja: knurów
- Podziękował: 41 razy
- Pomógł: 4 razy
[C++] jak to połączyć??
witam ma tutaj taki programik a dokładnie kilka jego części i nie wiem jak je połączyć ze sobą by to wszystko po kompilacji dobrze działało na informatykę mam napisać program o nazwie: Obliczanie \(\displaystyle{ a^{b} (mod \ n)}\) w pierścieniu \(\displaystyle{ Z_{n}}\)
pierwszy kawałek programu:
#include
int main()
{
int a,b,n,m,t;
printf("Podaj a:");
scanf("%d", &a);
printf("Podaj b:");
scanf("%d", &b);
printf("Podaj n:");
scanf("%d",&n);
t = a;
m = 1;
while(b)
{
if(b&1)
{
m *=t;
m %=n;
}
t *= t;
t %= n;
b>>=1;
}
int odwrotnosc, i;
for (i=1; (i*m) % n ==1; ++i);
odwrotnosc = i;
printf("Wynikiem jest %d
",m);
printf("Fajnie no nie
");
return;
}
drugi kawałek programu (liczy on elemtn odwrotny jeśli byłoby działanie \(\displaystyle{ a^{-b} (mod \ n)}\):
for (i=1; i
a właśnie mam tu jeszcze jeden kawałek programu:
if(a==0 && b==0) return;
albo
if(a==0 && b==0)
{
printf("Funkcja źle określona");
return;
}
które z tych dwóch warunków lepiej byłoby wrzucić do tego programu no i gdzie?? w którym miejscu??
pierwszy kawałek programu:
#include
int main()
{
int a,b,n,m,t;
printf("Podaj a:");
scanf("%d", &a);
printf("Podaj b:");
scanf("%d", &b);
printf("Podaj n:");
scanf("%d",&n);
t = a;
m = 1;
while(b)
{
if(b&1)
{
m *=t;
m %=n;
}
t *= t;
t %= n;
b>>=1;
}
int odwrotnosc, i;
for (i=1; (i*m) % n ==1; ++i);
odwrotnosc = i;
printf("Wynikiem jest %d
",m);
printf("Fajnie no nie
");
return;
}
drugi kawałek programu (liczy on elemtn odwrotny jeśli byłoby działanie \(\displaystyle{ a^{-b} (mod \ n)}\):
for (i=1; i
a właśnie mam tu jeszcze jeden kawałek programu:
if(a==0 && b==0) return;
albo
if(a==0 && b==0)
{
printf("Funkcja źle określona");
return;
}
które z tych dwóch warunków lepiej byłoby wrzucić do tego programu no i gdzie?? w którym miejscu??
[C++] jak to połączyć??
Kod: Zaznacz cały
potega(a, k, n) // potega == a^k mod n
if k>0
b=1
a=a mod n
while
if (k % 2)==1
b= (b * a) % n
k=k/2
if k == 0 then BREAK
a=(a*a) % n
return b
else
return 1
[C++] jak to połączyć??
Kod: Zaznacz cały
#include<stdio.h>
int potega(...
...
int main()
{
int a,b,n,m/*,t*/;
printf("Podaj a:");
scanf("%d", &a);
printf("Podaj b:");
scanf("%d", &b);
printf("Podaj n:");
scanf("%d",&n);
m=potega(a, b, n);
printf("Wynikiem jest %d
",m);
printf("Fajnie no nie :)
");
return;
}
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
[C++] jak to połączyć??
To jest kod w c... POZDROrefuss pisze:ok moja wina źle napisałem temat >.< ten program ma być kompilowany w języku C a nie C++ mógłbyś mi to przerzucić na język C?
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
[C++] jak to połączyć??
A ja zapytam wprost:
Xitami napisał :
Co to jest? To jakiś pseudokod, tylko trochę dziwny bo on zamiast ułatwiać raczej utrudnia sprawę. Rozumiem mniej więcej jaki był zamysł, ale głowy bym nie dał - tu zostawiam autorowi pole do wyjaśnienia, sprostowania.
A co do refuss to mam podejrzenie, że poprostu skopiował ten pseudokod i stąd błedy. Jeśli pochopnie oceniłem autora postu to przepraszam. Pozdro
Xitami napisał :
Kod: Zaznacz cały
potega(a, k, n) // potega == a^k mod n
if k>0
b=1
a=a mod n
while
if (k % 2)==1
b= (b * a) % n
k=k/2
if k == 0 then BREAK
a=(a*a) % n
return b
else
return 1
A co do refuss to mam podejrzenie, że poprostu skopiował ten pseudokod i stąd błedy. Jeśli pochopnie oceniłem autora postu to przepraszam. Pozdro
[C++] jak to połączyć??
A czemu dziwny? wystarczy dodać w odpowiednich miejscach "int", "{", "}" i ";" i będzie C.
Wcześniej zamienić "=" na ":=", a "%" na "mod" i będzie Pascal.
No kurtka wodna prościej się nie da, więc ja tak sobie piszę, odrobina zastanowienia i będzie zrozumiałe.
A jest tak "udziwnione" tylko po to żeby mieć szansę doczekać się na wynik.Możemy chcieć liczyć np "13^12345678 mod 100" o ile szybciej policzymy coś pierwszym sposobem niż drugim?
Odp. Dramartycznie
Wcześniej zamienić "=" na ":=", a "%" na "mod" i będzie Pascal.
No kurtka wodna prościej się nie da, więc ja tak sobie piszę, odrobina zastanowienia i będzie zrozumiałe.
A jest tak "udziwnione" tylko po to żeby mieć szansę doczekać się na wynik.
Kod: Zaznacz cały
pow (a, k, n) //a^k % n
a=a%n
b=1
while (k>0)
b= (b*a) % n
k--
return b
Odp. Dramartycznie
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
[C++] jak to połączyć??
NIe zrozumiałeś mojej uwagi. Myślałem, że wyraźnie widać, że jest skierowana w formę, a nie w treść. Chodzi mi o to, że jak piszesz odpoweidź komuś kto nie bardzo orientuje się w temacie to każde twoje niechlujstwo, udziwnienie powoduje niepotrzebny zamęt. Nie chciałeś podać całego kodu w C czy w Pascalu, rozumiem, napisz w pseudopascalu lub słownie. Ale ta wesoła twórczośc miksująca Pascala z C - tobie i komuś kto się zna na temacie to nie robi różnicy, ale dla kogoś kto się nie orientuje zbyt dobrze może być to problem. Pamiętaj miksy to są dobre w P.....
Co do meritum zadania nie mam oczywiście zastrzeżeń, sam wiesz, że znasz się na tej tematyce. Mam nadzieję, że nie zraziłem cię do pomagania na forum - przeciwnie zachęcam do wspierania twoją wiedzą. Pozdro
Co do meritum zadania nie mam oczywiście zastrzeżeń, sam wiesz, że znasz się na tej tematyce. Mam nadzieję, że nie zraziłem cię do pomagania na forum - przeciwnie zachęcam do wspierania twoją wiedzą. Pozdro
[C++] jak to połączyć??
Jeżeli pytającemu zależy tylko na przerzuceniu odwalenia pracy domowej na kogoś innego, to moja pomoc na nic mu się nie zda. I dobrze.
Jeżeli jest ciekaw rozwiązania, to sobie poradzi.
Jeżeli jest ciekaw rozwiązania, to sobie poradzi.