Microsoftovi dekuju za odpoved, nicmene uloha nejspis predpoklada vstup bez mezer, tak se mi nechtelo se s tim otravovat :). S plusem na zacatku jsem se nakonec vyporadal (snad) booleanem a dal jsem uz puvodne (pred napsanim semka) vsechno delal zhruba tak, jak jsi navrhoval, akorat jsem tam mel spoustu chyb.
Nakouskovat reseni do procedur a funkci by asi bylo vic nez zadouci, ale zatim procedury ani funkce neumim :D, tak treba pozdeji.
Nicmene se mi i presto po moc a moc hodinach prace povedlo neco, co vypada aspon trochu funkcne, tak to sem prikladam. Zkoumat to stejne asi nikdo moc nebude vzhledem ke komplikovanosti toho kodu :).
program kolokv_komplexcis1;
uses crt;
const zaklad=10;
var zadane:string;
i,j,k,mocnina,vysledek1,vysledek2,cislo,p:integer;
prvniakladne,komplex:boolean;
begin
clrscr;
writeln('Zadejte pocetni operaci ve tvaru souctu/rozdilu komplex. cisel s celociselnymi koeficienty ');
writeln('(napr. 3+5i-7-1i+2i+1): ');
readln(zadane);
komplex:=false;
vysledek1:=0;
vysledek2:=0;
i:=0;
if zadane[1]<>'-' then prvniakladne:=true
else prvniakladne:=false;
repeat
if komplex then i:=i+2
else i:=i+1;
if zadane[i]='-' then begin
cislo:=0;
i:=i+1;
j:=i;
while (ord(zadane[j])>=ord('0')) and (ord(zadane[j])<=ord('9')) and (j<length(zadane)) do j:=j+1;
if j<length(zadane) then for k:=i to j-1 do begin
p:=j-1-k;
mocnina:=1;
if p>0 then repeat
mocnina:=zaklad*mocnina;
p:=p-1;
until p=0;
cislo:=cislo+((ord(zadane[k])-ord('0'))*mocnina);
end
else for k:=i to j do begin
p:=j-k;
mocnina:=1;
if p>0 then repeat
mocnina:=zaklad*mocnina;
p:=p-1;
until p=0;
cislo:=cislo+((ord(zadane[k])-ord('0'))*mocnina);
end;
i:=j-1;
if zadane[i+1]='i' then begin
vysledek2:=vysledek2-cislo;
komplex:=true;
end
else begin
vysledek1:=vysledek1-cislo;
komplex:=false;
end;
prvniakladne:=false;
end
else if (zadane[i]='+') or prvniakladne then begin
cislo:=0;
if not prvniakladne then i:=i+1;
j:=i;
while (ord(zadane[j])>=ord('0')) and (ord(zadane[j])<=ord('9')) and (j<length(zadane)) do j:=j+1;
if j<length(zadane) then for k:=i to j-1 do begin
p:=j-1-k;
mocnina:=1;
if p>0 then repeat
mocnina:=zaklad*mocnina;
p:=p-1;
until p=0;
cislo:=cislo+((ord(zadane[k])-ord('0'))*mocnina);
end
else for k:=i to j do begin
p:=j-k;
mocnina:=1;
if p>0 then repeat
mocnina:=zaklad*mocnina;
p:=p-1;
until p=0;
cislo:=cislo+((ord(zadane[k])-ord('0'))*mocnina);
end;
i:=j-1;
if zadane[i+1]='i' then begin
vysledek2:=vysledek2+cislo;
komplex:=true;
end
else begin
vysledek1:=vysledek1+cislo;
komplex:=false;
end;
prvniakladne:=false;
end;
until i=length(zadane);writeln;
write(vysledek1);
if vysledek2>=0 then write('+');
write(vysledek2,'i');
readln;
end.