• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Liczba do potęgi 3

Object Storage Arubacloud
0 głosów
957 wizyt
pytanie zadane 23 marca 2021 w Inne języki przez Martita Bywalec (2,500 p.)

Proszę o pomoc. Mam za zadanie napisać program, w Pascalu, który liczy potęgę, a dokładnie Liczbę do potęgi 3. Napisałam program w C++ i chcę go przekształcić na Pascal. Nigdy nie miałam Pascala. Nawet nie mieliśmy podstaw. Częściowo udało mi się przekształcić kod, ale resztę nie mam zielonego pojęcia jak zrobić. Szukałam 2 dni i nie znalazłam. Jest to na zaliczenie przedmiotu nie związanego z nauką programowania. 

C++

#include<stdio.h>
#include<iostream>
 
using namespace std; //przestrzen nazw std
 
//funkcja obliczajaca potęge W liczby A
int potega(int P,int W)
{
if (W==0)return 1;
else
return P=P*potega(P,--W);
}
 
//funkcja główna
int main()
{
cout << "23 ^ 3 = " ;
cout << potega(23,3);
return 0;
}

Pascal

program potega;
var 
 potega(P: integer,W: integer);
 
begin
   (W==0) 
  P=P*potega(P,--W);
end
begin
  wartosc := potega(23,3);
  write("Trzecią potęgą liczby 2 jest : ");
  writeln(wartosc);
end.

 

1 odpowiedź

0 głosów
odpowiedź 23 marca 2021 przez reaktywny Nałogowiec (41,050 p.)
wybrane 24 marca 2021 przez Martita
 
Najlepsza

Jeśli to ma liczyć ręcznie, to kod będzie bardzo podobny.

Zamień --W

na

W := W - 1;

A P=P*potega(P,--W);

na:

P:=P * potega(P, W);

W pascalu / Delphi jest też funkcja gotowa power(x, y). Jest też operator ** znany np. z Pythona.

function Potega(x : Integer, y: Integer): Real;
begin
    if (y == 0) Potega := 1;
    y = y - 1;
    Potega := x * Potega(x, y);   
end;

Trzeba przetestować ten kod, bo nie mam pewności, czy jest OK.

komentarz 23 marca 2021 przez Martita Bywalec (2,500 p.)

Ten kod nie działa. Pisze

main.pas(2,27) Fatal: Syntax error, ")" expected but "," found
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)
Program potega;
function Potega(x: Integer, y: Integer): Real;
begin
    if (y == 0) Potega: = 1;
    y = y - 1;
    Potega: = x *  Potega(x, y);   
end;

 

komentarz 23 marca 2021 przez reaktywny Nałogowiec (41,050 p.)
edycja 23 marca 2021 przez reaktywny

A której linii dotyczy błąd?

 

Nie rób spacji między dwukropkiem, a równa się! To jest operator :=

Jeszcze możesz zmienić tą linię:

function Potega(x, y: Integer): Real;

komentarz 23 marca 2021 przez Martita Bywalec (2,500 p.)

Nadal błędy

main.pas(4,12) Error: Illegal expression
main.pas(4,14) Fatal: Syntax error, ")" expected but "ordinal const" found
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)
Program potega;
function Potega(x, y: Integer): Real;
begin
    if (y == 0) Potega:= 1;
    y = y - 1;
    Potega:=x *  Potega(x, y);   
end;

 

komentarz 23 marca 2021 przez reaktywny Nałogowiec (41,050 p.)

Nie mam pewności czy if jest dobrze zapisany.

Poza tym w y = y - 1;

trzeba zastąpić = z :=

Moje przeoczenie, tak to jest jak się pisze nie mając kompilatora Pascala

 

 

komentarz 23 marca 2021 przez reaktywny Nałogowiec (41,050 p.)
procedure Power(BASE1,VALUE2:REAL;
                     var RECURSION2:REAL);
       var
       BASE,       
       VALUE:REAL;

        function RECURSION(VALUE:REAL):REAL;  {Synonym of Power}
          begin{RECURSION}
           if VALUE = 0 then
            RECURSION := 1
            else
            RECURSION := BASE*RECURSION(VALUE-1);
          end;{RECURSION}
       begin
         BASE:=BASE1;
         VALUE:=VALUE2;
         RECURSION2:=RECURSION(VALUE)
      end;

   POWER(BASE,EXPONENT,OUTPUT VARIABLE);

 

Źródło: http://computer-programming-forum.com/29-pascal/07969ed094a29c78.htm

komentarz 23 marca 2021 przez Martita Bywalec (2,500 p.)

Wywala błąd

main.pas(20,4) Fatal: Syntax error, "BEGIN" expected but "identifier POWER" found
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)

Ja korzystam z kompilatora online https://www.onlinegdb.com/online_pascal_compiler

komentarz 23 marca 2021 przez reaktywny Nałogowiec (41,050 p.)

Kod znaleziony - powinien działać.

A nie działa od "pierwszego kopniaka", bo to jest sama procedura. Trzeba ją wkleić do programu i odpalić jej kod, wykonać procedurę.

komentarz 23 marca 2021 przez Martita Bywalec (2,500 p.)
Czyli jak to ma wyglądać?
komentarz 23 marca 2021 przez Martita Bywalec (2,500 p.)

@reaktywny,
 Może ten kod będzie łatwiej poprawić

program potega;
var
 potega(P: integer,W: integer);
  
begin
   W := W - 1; 
  P:=P * potega(P, W);
end
begin
  wartosc := potega(23,3);
  write("Trzecią potęgą liczby 2 jest : ");
  writeln(wartosc);
end.

Wyskakuje błąd

main.pas(3,2) Error: Duplicate identifier "potega"
main.pas(3,8) Fatal: Syntax error, ":" expected but "(" found
Fatal: Compilation aborted

 

 

komentarz 23 marca 2021 przez reaktywny Nałogowiec (41,050 p.)
Boje się, że ten z Internetu jest lepszy, bo w pascalu (którego nie pamiętam, ani nigdy nie znałem dobrze) w dość nietypowy sposób wykonuje się rekurencję.

Można to przerobić na kod iteracyjny, bez rekurencji, co będzie prostsze.
komentarz 23 marca 2021 przez Martita Bywalec (2,500 p.)
ok jak to zrobić?

To ma być prosty kod.
komentarz 23 marca 2021 przez reaktywny Nałogowiec (41,050 p.)

OK, podsyłam gotowca....

program Hello;

Uses sysutils;

Var pow_result : Real;
   
procedure Power(BASE1,VALUE2:REAL; var RECURSION2:REAL);
 var
   BASE, VALUE:REAL;
 
        function RECURSION(VALUE:REAL):REAL;  {Synonym of Power}
          begin{RECURSION}
           if VALUE = 0 then
            RECURSION := 1
            else
            RECURSION := BASE*RECURSION(VALUE-1);
          end;{RECURSION}
       begin
         BASE:=BASE1;
         VALUE:=VALUE2;
         RECURSION2:=RECURSION(VALUE)
      end;
 
   
begin
  pow_result := 0.0;
  writeln('Potęgowanie 2**4 = 4**2');
  Power(2, 4, pow_result);
  writeln(FloatToStr(pow_result));
  Power(4, 2, pow_result);
  writeln(FloatToStr(pow_result));
end.

 

komentarz 24 marca 2021 przez Martita Bywalec (2,500 p.)
Działa dzięki

Podobne pytania

0 głosów
2 odpowiedzi 260 wizyt
0 głosów
0 odpowiedzi 448 wizyt
0 głosów
0 odpowiedzi 1,032 wizyt
pytanie zadane 2 grudnia 2017 w Inne języki przez DragonCoder Nałogowiec (36,500 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...