[C++] jak to połączyć??

Awatar użytkownika
refuss
Użytkownik
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ć??

Post autor: refuss »

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

[C++] jak to połączyć??

Post autor: Xitami »

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
Awatar użytkownika
refuss
Użytkownik
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ć??

Post autor: refuss »

hmm coś z tego tam rozumiem ale mógłbyś mi powiedzieć co tu zrobić by połączyć ten twój kod z całym programem??
Xitami

[C++] jak to połączyć??

Post autor: Xitami »

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;
}
Awatar użytkownika
refuss
Użytkownik
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ć??

Post autor: refuss »

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?
soku11
Użytkownik
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ć??

Post autor: soku11 »

refuss 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?
To jest kod w c... POZDRO
Awatar użytkownika
refuss
Użytkownik
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ć??

Post autor: refuss »

no to czemu to nie chce się kompilować?? -.^
soku11
Użytkownik
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ć??

Post autor: soku11 »

Jasnowidzem nie jestem Napisz jakie masz bledy, albo co sie pojawia... POZDRO
Awatar użytkownika
kadiii
Użytkownik
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ć??

Post autor: kadiii »

A ja zapytam wprost:
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
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

[C++] jak to połączyć??

Post autor: Xitami »

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.

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
Możemy chcieć liczyć np "13^12345678 mod 100" o ile szybciej policzymy coś pierwszym sposobem niż drugim?
Odp. Dramartycznie
Awatar użytkownika
kadiii
Użytkownik
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ć??

Post autor: kadiii »

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
Xitami

[C++] jak to połączyć??

Post autor: Xitami »

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