Forum CDRinfo.pl

Forum CDRinfo.pl (https://forum.cdrinfo.pl/)
-   Off topic (https://forum.cdrinfo.pl/f5/)
-   -   Potrzebuje pomocy... z Pascalem (https://forum.cdrinfo.pl/f5/potrzebuje-pomocy-pascalem-46164/)

pablocoo 09.01.2005 14:23

Potrzebuje pomocy... z Pascalem
 
Na srode musze zrobic w Pascalu kalkulator jak prace zaliczeniowa na semest i wogole nie wiem jak sie za to zabrac...
Chetnie przeczytalbym jakies pomysly, moze ktos ma cos gotowego? :mruga:

Predi 09.01.2005 14:27

nie wiem jaki masz problem ???
jezeli znasz podstawy to najprostszy mozna zrobic
"Podaj dzialanie" tu 4 ify i else odnoszace do danych funccji, lub nawet na zywo po ifie intrukcje zeby podac dwie liczyby, cos z nimi robisz (dodajesz, odejmujesz itd)
a potem wypisujesz wynik....

ps. mase taki kalkulatorow na pewno jest w sieci to to czesty temat

andy 09.01.2005 14:39

Dokladnie znjac podstawy mozna zrobic bardzo przyzwoity kalkulator ;)
Jak kcesz jakies zrodla to wejdz tu: 4programmers.net :spoko:

luminat 09.01.2005 18:22

Polecam stronke www.komputery-internet.net - bardzo duzo o programowaniu m. in. pascal. PS kallkulator to jedna z najprostszych rzeczy jaka mozna zrobic w pascalu...

MacGyver 09.01.2005 20:17

Cytat:

Napisany przez luminat
Polecam stronke www.komputery-internet.net - bardzo duzo o programowaniu m. in. pascal. PS kallkulator to jedna z najprostszych rzeczy jaka mozna zrobic w pascalu...

...i napisanie zajmuje doslownie 5 minut...

..::Update::..
Wynik 2-minutowej pracy (nie mam Pascala wiec napisalem to w Delphi...ale w Pascalu chyba bedzie wygladać podobnie) :)
Programik robi podstawowe obliczenia (trzeba jeszcze dodac obsluge dzielenie przez zero)

Kod:

program kalkulatorek;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var a,b,w: integer;
    d: char;
begin
    write ('Podaj pierwsza liczbe: ');
    readln (a);
    write ('Podaj druga liczbe: ');
    readln (b) ;
    write ('Podaj znak dzialania (+,-,*,/): ');
    readln (d);
    if d='+' then w:=a+b;
    if d='-' then w:=a-b;
    if d='*' then w:=a*b;
    if d='/' then w:=a mod b;
    writeln ('Wynik dzialania wynosi: ',w);
    readln;
end.


luminat 09.01.2005 20:54

Cytat:

Napisany przez MacGyver
program kalkulatorek;

....
if d='/' then w:=a mod b;
....

Oj nie, tym razem pomyliles sie MacGyver, w pascalu dzielenie okresla sie zwykly znakiem dzielenia '/'. A instrukcja mod o ktorej tu wspomniales zwraca reszte z dzielenia. Aby mi tu ktos nie wyskoczyl czasem z div'em to wspomne, ze to jest dzielenie calkowite a nie zwykle dzielenie.

MacGyver 09.01.2005 21:06

Cytat:

Napisany przez luminat
Oj nie, tym razem pomyliles sie MacGyver, w pascalu dzielenie okresla sie zwykly znakiem dzielenia '/'. A instrukcja mod o ktorej tu wspomniales zwraca reszte z dzielenia. Aby mi tu ktos nie wyskoczyl czasem z div'em to wspomne, ze to jest dzielenie calkowite a nie zwykle dzielenie.

No fakt wkradł się mały bład :) Pisałem to na szybko ;p

47 09.01.2005 21:14

Cytat:

Napisany przez MacGyver
...i napisanie zajmuje doslownie 5 minut...

..::Update::..
Wynik 2-minutowej pracy (nie mam Pascala wiec napisalem to w Delphi...ale w Pascalu chyba bedzie wygladać podobnie) :)
Programik robi podstawowe obliczenia (trzeba jeszcze dodac obsluge dzielenie przez zero)

Pozwoliłem sobie troszki przerobić.

Kod:

program kalkulatorek;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var a,b,w: integer;
    d: char;
begin
    write ('Podaj pierwsza liczbe: ');
    readln (a);
    write ('Podaj druga liczbe: ');
    readln (b) ;
    write ('Podaj znak dzialania (+,-,*,/): ');
    readln (d);
    case d of
    '+'  : w:=a+b;
    '-'  : w:=a-b;
    '*'  : w:=a*b;
    '/'    :
      Begin
        if b=0 then
            Writeln('Dzielenie przez 0' )
              else
                  w:=a/b;
            end;
          end;
 writeln ('Wynik dzialania wynosi: ', w);
    readln;
end.


luminat 09.01.2005 22:05

Nie bede cytal calego, ale ja bym zastapił readln(d) na read(d); lub d:=readkey; - nie trzeba nacisnac klawisza enter w celu potwierdzenia wyboru. Dodałbym jeszcze modul crt (standard przy programach pascalowych) i komende crt na samym poczatku po begin oraz petle repeat ktora na samym koncu pytala by sie czy zakonczyc dzialanie programu. Ale cos nie wierze, ze taki prosty programik mialby by na zaliczenie semestru autorowi tematu pewnie chodzilo o cos bardziej skomplikowanego z bajerami i jaka szata graficzna :spoko: .

MacGyver 09.01.2005 22:11

Co do wspomnianej pętelki

Kod:

program kalkulatorek;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var a,b,w: integer;
    d, k: char;
begin
    repeat
    write ('Podaj pierwsza liczbe: ');
    readln (a);
    write ('Podaj druga liczbe: ');
    readln (b) ;
    write ('Podaj znak dzialania (+,-,*,/): ');
    readln (d);
    case d of
    '+'  : w:=a+b;
    '-'  : w:=a-b;
    '*'  : w:=a*b;
    '/'    :
      Begin
        if b=0 then
            Writeln('Dzielenie przez 0' )
              else
                  w:=a/b;
            end;
          end;
 writeln ('Wynik dzialania wynosi: ', w);
    writeln ('Wcisnij W aby wyjsc lub dowolny klawisz aby podac nowe liczby');
    read (k);
  until k='w';
end.

...lub podobnie (na to jest masa sposobów)

pablocoo 11.01.2005 18:09

Dzieki wszystkim za odpowiedz

Mam jeszcze pytanie: kiedy ustawiam typ zmiennej jako 'real' to wyniki wychodza np. 2.000000000E +0000
A kiedy ustawie typ jako 'integer' to wywala blad z dzieleniem.
Jakiego typu mam uzyc?

Predi 11.01.2005 18:16

zeby nie bylo "2.000000000E +0000" wypisuj zmienne np tak: writeln(zmienna:2:2); te dwojki znacza ze bedzie wyswietlana po dwoch polach z dwoma miejscami po przecinku

MacGyver 11.01.2005 18:19

Cytat:

Napisany przez pablocoo
Dzieki wszystkim za odpowiedz

Mam jeszcze pytanie: kiedy ustawiam typ zmiennej jako 'real' to wyniki wychodza np. 2.000000000E +0000
A kiedy ustawie typ jako 'integer' to wywala blad z dzieleniem.
Jakiego typu mam uzyc?

Daj zmienną w jako real a linijke odpowiedzialną za wyswietlanie wyniku zmodyfikuj np tak:
Kod:

writeln ('Wynik dzialania wynosi: ', w:0:2);
..::Update::..
@Predi był szybszy ;p

pablocoo 11.01.2005 18:22

A da sie tak zrobic, zeby liczby calkowite wyswietlal normalnie bez miejsc po przecinku, a ulamki po 2 miejsca po przecinku, jak wynik przechowuje w tej samej zmiennej?

Predi 11.01.2005 18:26

napewno sie da :) np. masz

var a, b, d : integer;
var f : real;

begin
writeln ('podaj a');
readln(a);
writeln ('podaj b');
readln(b);

f:=a/b;

d:=a div b;

if d < f then writeln (f:2:2) else writeln (d);
end.

musisz to teraz tylko wstawic w ten fragment programu gdzie kalkulator dzieli, polega to na tym, ze f jest typu real i przechowuje rzeczywista wratosc dzielenia, natomiast d przechowuje wartosc calkowita, po odcieciu cyfr po kropce, jezeli f jest wieksze od d (a bedzie tak tylko wtedy jezeli bedzie cos mialo po kropce) to wypisywane jest np. 2.11 jezeli sa rowne, to wyswietla d jako normalna liczbe, bez kropki


Wszystkie czasy w strefie CET. Aktualna godzina: 03:13.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.