Калькулятор на Pascal

Питання вирішено ізакрито.

Найкраща відповідь

KaKTyCC (30) 7 (37668) 10 56 152 10 років

program calc; var operation:byte; a,b:integer; begin writeln('a'); readln(a); writeln( 'b'); readln(b); writeln('1 - sum'); writeln('2 - sub'); writeln('3 - div'); writeln('4 - mul'); readln(operation); case operation of: 1: writeln(a+b); 2: writeln(a-b); 3: writeln(trunc(a/b)); 4: writeln(a*b); end; end.

AndrJuWa (34) 7 (25343) 2 5 16 10 років

Робиш B string Вважаєш символ Потому IFом/CASEом перевіряєш і робиш відповідну дію. А ідеально взагалі введення повного прикладу і вже розпарити рядок на числа та дії.

uses crt; var a,c,x: real; var b: string; begin clrscr;

writeln('1 Число'); readln(a); writeln('Дія'); readln(b); writeln('2 Число'); readln(c);

MFA 6 (5300) 1 3 9 10 років

А в інших мовах є eval, якою можна передати "a+b" і воно поверне тобі відповідь :-)

У паскалі доведеться case-ом перебирати всі можливі математичні функції

JI0JI 6 (16911) 2 10 26 10 років

Якийсь код із Матриці.

blblblbl 8 (115661) 8 15 115 10 років

Нененене не фіга у тебе не вийде. Тут треба купу if then або case of застосовувати. та аналізувати b. Типу, якщо b='+', тоді x=a+b, і b як символ, а чи не число зроби. + - * / це ж не числа

MiTja (31) 6 (7479) 2 4 14 10 років

пропонуй користувачеві на вибір press 1 to + press 2 to - readline(b) і так далі потім if b = 1 then otvet:=a +b тему вловив? сам синтаксис пам'ятаю т.к. вивчав давно

Схожі питання

while (abs(k) eps) do begin < S := S + (pow(-1, k) / (k * k)); k:= k + 1; >;

я не пам'ятаю синтаксис Паскаля, але суть відображена pow - звести число в ступінь - чи не впевнений чи є таке в Паскалі, але можна реалізувати за допомогою for циклу abs - модуль чилса або абсолютне значення; якщо немає ф-ії, то перевірку на 1 do begin Result := Result * v; Dec (v); end; end;

Нахилиш серед білого дня ПОСИЛЛУУУ МЕНІ ДАЛИ ШВИДКО. У гугле дивись

Взагалі не розумію, навіщо тобі це треба, якщо ти навіть інформацію в гугле знайти не можеш? (без образ)

В обох випадках розподіл відбувається на ціле число - тому, що k:Integer, а sqr() обчислює квадрат k. Таким чином, здається, що розподіл на нуль відбуватися не може - тому що в основному блоці програми k починається від 1 і потім тільки збільшується в циклі (на +1 при кожній ітерації).

Паскаль має свою особливість – у всіх типів є максимальне значення. Для Integer - діапазон, здається, -32768..32767. Якщо в якийсь момент значення k дорівнює 32767 і до нього додається ще 1, то виходить -32768 (тобто починається відстче від іншого кінця діапазону). При подальшому збільшенні значення циклі - щоразу на 1 - негативні значення k збільшуються і досягають нуля. У цей момент відбувається розподіл на нуль.

Швидше за все неправильно задано умову переривання циклу і він триває довше, ніж було задумано. Потрібно перевірити – за допомогою виведення всіх значень, як і було запропоновано.

Можливо також відключити "функцію" Паскаля, яка перетворює 32767 + 1 на -32768. Потрібно задати якусь спеціальну директиву компілятору (шукай у кулі за "аритметичний overflow").