
var a,b,c,d:real;
c1, c2, z1, z2:real;
begin
write('Введи числитель первой дроби: '); read(a);
write('Введи знаменатель первой дроби: '); read(b);
write('Введи числитель второй дроби: '); read(c);
write('Введи знаменатель второй дроби: '); read(d);
write(a + ' / ' + b + ' + ' + c + ' / ' + d + ' = ');
if(b = d) then begin
c1 := a + c;
write(c1 + ' / ' + b);
End else Begin
z1 := b * d;
c1 := (z1 / b) * a;
c2 := (z1 / d) * c;
z2 := c1 + c2;
write(z2 + ' / ' + z1);
end;
end.
--- Python 3.8.3 ---
import typing
from typing import Iterable
from typing import List
from typing import Any
from typing import AnyStr
from typing import Callable
from typing import NoReturn
def _Ok(func: Callable[[Any], Any]):
def OkWrapper(*a, **kw):
r = func(*a, **kw)
if(r):
print('ok')
else:
print('Error')
return OkWrapper
class Queue:
buffer = []
_t = None
_iterPos = 0
def __init__(self, t, InitSeq : Iterable[Any] = None):
if (InitSeq != None):
self.buffer.extend(InitSeq)
self._t = t
def __getitem__(self, position):
return self.buffer[position]
def __len__(self):
return len(self.buffer)
@property
def T(self):
return self._t
@_Ok
def push(self, item):
assert isinstance(type(item), type(self._t))
self.buffer.append(item)
self._length = len(self.buffer)
return True
@_Ok
def clear(self):
self.buffer.clear()
return True
def front(self):
return self._peek(0)
@_Ok
def pop(self):
if (len(self.buffer) > 0):
self.buffer.pop(0); return True
return False
def _peek(self, itempos):
if (len(self.buffer) > 0):
return self.buffer[itempos]
print('Error: Empty Queue'); return
def CommandHandler(q: Queue, cmds: List[AnyStr]) -> NoReturn:
IsRunning = True
while IsRunning:
NewCmd = input()
Tokens = NewCmd.split(' ')
if (Tokens[0] == 'push'):
try:
q.push(q.T(Tokens[1]))
except IndexError:
print('Invalid Command')
except AssertionError:
print('Invalid pushed type')
if (Tokens[0] == 'pop'):
q.pop()
if (Tokens[0] == 'front'):
print(q.front())
if (Tokens[0] == 'size'):
print( len(q) )
if (Tokens[0] == 'clear'):
q.clear()
if (Tokens[0] == 'exit'):
print('bye')
IsRunning = False
def main():
q = Queue(int)
avCommands = ['push','pop','front','size','clear', 'exit']
CommandHandler(q, avCommands)
if __name__ == "__main__":
main()
Пояснения:
Экземпляр Queue может инициализироваться как пустой очередью, так и уже заполненной. Что бы инициализировать пустую очередь, не передавайте в конструктор InitSeq:
q = Queue(int)
Что бы инициализировать очередь с некоторыми значениями, передайте в конструктор InitSeq:
q = Queue(int, [1,2,4,5,6])
Класс Queue строго типизирован, и каждый новый элемент будет проверяться на соответствие хранимому типу, с которым был инициализирован текущий экземпляр.
В моей реализации класс Queue не поддерживает изменение хранимого типа с приведением всех хранимых значений к новому типу
В моей реализации класс Queue не поддерживает изменение хранимого типа без приведения хранимых значений
В моей реализации класс Queue не поддерживает изменение хранимого типа при пустом буфере.
В моей реализации класс Queue является итерируемым объектом (Поддерживает простой перебор в цикле for), а так же поддерживает доступ к элементу по индексу из вне.
q[index] -> q.buffer[index]