Anonymní profil Packal – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Packal – Programujte.comAnonymní profil Packal – Programujte.com

 

Příspěvky odeslané z IP adresy 94.113.222.–

Packal
Pascal › String, cykly - scitani komp…
28. 12. 2014   #197645

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.
Packal
Pascal › String, cykly - scitani komp…
27. 12. 2014   #197604

Zdravim, uz se tu druhy den peru s jednou ulohou, a protoze uz mi pomalu dochazi trpelivost, tak vas prosim o pomoc. Program by mel delat to, ze do nej uzivatel zada soucet/rozdil komplexnich cisel s celociselnymi koeficienty (napr. 3+5i-7-1i+2i+1) a ma se vypsat vysledek operace (v tomhle pripade -3 + 6i).

Prikladam zdrojak a vim, ze je asi neuveritelne slozity az hloupy. Bohuzel mi to programovani nejde a predmet jsem si vubec nemel zapisovat, s cimz ted uz ovsem nic moc nenadelam :).

Krom toho mam u Pascala porad nejake problemy s kompatibilitou, procez si napr. nejsem schopny zprovoznit to "krokovani" v debuggeru, takze sice vim, ze nekde "pretikam" mimo pole, ale nevim kde atd., tak uz to tady zkousim metodou pokus/omyl a vidim, ze to nikam nevede, tak budu rad za kazdou pomoc.

program komplexcis;
uses crt;

const zaklad=10;
var zadane:string;
    i,j,k,mocnina,vysledek1,vysledek2,cislo,cislo2,p:integer;
    prvniakladne: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);

  i:=0;
  if zadane[1]<>'-' then prvniakladne:=true
    else prvniakladne:=false;

  repeat

    mocnina:=1;
    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;

      for k:=i to j-1 do begin

        p:=j-1-k;
        mocnina:=1;

        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]='i' then vysledek2:=vysledek2-cislo
        else vysledek1:=vysledek1-cislo;

    end

    else if (zadane[i]='+') or prvniakladne then begin

      cislo2:=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;

      for k:=i to j-1 do begin

        p:=j-1-k;
        mocnina:=1;

        repeat

          mocnina:=zaklad*mocnina;
          p:=p-1;

        until p=0;

        cislo2:=cislo2+((ord(zadane[k])-ord('0'))*mocnina);

      end;

      i:=j-1;
      if zadane[i+1]='i' then vysledek2:=vysledek2+cislo2
        else vysledek1:=vysledek1+cislo2;

    end;

    prvniakladne:=false;

  until i=length(zadane);

  writeln(vysledek1,' ',vysledek2,'i');


  readln;

end.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý