dzielenie pisemne [pascal]

1

Mysle, ze wszyscy znamy algorytm dzielenia pisemnego. Przypuszczam, ze nauczono go nas juz w podstaowce. Tym bardziej zaskakuje mnie fakt, ze nie latwo jest przetworzyc go do postaci dzialajacego programu w Pascalu.

Oto moje wypociny:

program pisemne;
uses crt;
var
dzielna:string;
dzielnik:string;
dziel:string;
wynik:integer;
reszta:string;
krok:integer;
blad:integer;
cos:string;
c,i:integer;
dn,dk,dldk,dldn,w,dz,odj:integer;

begin
writeln('podaj dzielna i dzielnik');
readln(dzielna);
readln(dzielnik);

val(dzielnik,dk,blad);
val(dzielna,dn,blad);
writeln('dn: ',dn);
writeln('dk: ',dk);
dldn:=length(dzielna);
writeln('dldn: ',dldn);
dldk:=length(dzielnik);
writeln('dldk: ',dldk);

for i:=1 to dldk do
begin
dziel[i]:=dzielna[i];
end;

writeln('dziel: ',dziel);
val(dziel,dz,blad);
writeln('dz: ',dz);

for krok:=1 to (dldn-dldk) do
begin
if dz>=dk then
begin
w:=dz div dk;
wynik:=wynik10+w;
odj:=w
dk;
dz:=dz-odj;
writeln('krok: ',krok);
writeln('w: ',w);
writeln('wynik: ',wynik);
writeln('odj: ',odj);
writeln('dz: ',dz);
end ;
reszta:=dziel;
cos:=dzielna[length(dziel)+krok];
val(cos,c,blad);
dz:=dz*10+c;
writeln('reszta: ',reszta);
writeln('cos: ',cos);
writeln('c: ',c);
writeln('dz: ',dz);
end;
writeln('dzielna: ',dn);
writeln('dzielnik: ',dk);
writeln('wynik z dzielenia :',wynik,'reszty :',reszta);
readln;
end.

absurdalna ilosc zmiennych nie pomogla rozwiazac problemu. program dziala, choc robi to ZLE.
bede dozgonnie wdzieczna, jesli ktos z Was powie mi jak naprawic to cholerstwo.

0
nooit napisał(a)

Mysle, ze wszyscy znamy algorytm dzielenia pisemnego. Przypuszczam, ze nauczono go nas juz w podstaowce. Tym bardziej zaskakuje mnie fakt, ze nie latwo jest przetworzyc go do postaci dzialajacego programu w Pascalu.

Oto moje wypociny:

program pisemne;
uses crt;
var
dzielna:string;
dzielnik:string;
dziel:string;
wynik:integer;
reszta:string;
krok:integer;
blad:integer;
cos:string;
c,i:integer;
dn,dk,dldk,dldn,w,dz,odj:integer;

absurdalna ilosc zmiennych nie pomogla rozwiazac problemu. program dziala, choc robi to ZLE.
bede dozgonnie wdzieczna, jesli ktos z Was powie mi jak naprawic to cholerstwo.

A słyszałaś o czymś takim jak formatowanie kodu? Wcięcia, itp... Ujmij kod w klamry
lub <code class="delphi"></code> i wklej jeszcze raz. Przyznam się bez bicia, że nie che mi się analizować tak napisanego kodu (wygląda jak recepta od lekarza).

0

Po pierwsze to nie bardzo rozumiem co program ma robic?

Czy w wyniku ma po prostu robic to co operatory MOD i DIV??
Bo jesli tak to mozna ich od razu uzyc:

Writeln('Wynik: ',dzielna mod dzielnik);
Writeln('Reszta: ',dzielna div dzielnik);

Po drugie pierwsze to co sie rzuca w oczy to niepotrzebne zaciemnianie kodu wyswietlajac
tyle zmiennych.

0

zadaniem tego programu jest praktyczne zrealizowanie tak zwanego dzielenia pisemnego. dlatego nie moge najzwyczajniej w swiecie skupic sie na uzyciu div i mod. nie potrafilam sie obejsc bez takiej ilosci zmiennych, do Was wlasnie kieruje prosbe o pomoc w uporaniu sie z ta absurdalna iloscia. Prosze sie nie dziwic temu, ze dzielna i dzielnik wczytuje jako string i pozniej morduje sie by przerobic je na liczby. String jest to wymaganie pomyslodawcy tego zadania.
wciecia sa, ale przepadly podczas kopiowania.moj blad

1
program pisemne;
uses crt;
var
dzielna:string;
dzielnik:string;
dziel:array [1..1000] of integer;
wynik:integer;
reszta:integer;
krok:integer;
blad:integer;
cos:string;
dn2,i:integer;
dn,dk,dldk,dldn,w,dz,odj:integer;

begin
writeln('podaj dzielna i dzielnik');
readln(dzielna);
readln(dzielnik);

val(dzielnik,dk,blad);
val(dzielna,dn,blad);
writeln('dn: ',dn);
writeln('dk: ',dk);
dldn:=length(dzielna);
writeln('dldn: ',dldn);
dldk:=length(dzielnik);
writeln('dldk: ',dldk);

dn2:=dn;
for i:=dldn downto 1 do
    begin
    dziel[dldn]:=dn2 mod 10;
    dn2:=dn2 div 10;
    writeln('dziel[',i,']:  ',dziel[dldn]);
    end;

for krok:=1 to dldn do
            begin
                dz:=dz*10+dziel[krok];
                w:=dz div dk;
                wynik:=wynik*10+w;
                odj:=w*dk;
                dz:=dz-odj;
                writeln('krok: ',krok);
                writeln('w: ',w);
                writeln('wynik: ',wynik);
                writeln('odj: ',odj);
                writeln('dz: ',dz);
                reszta:=dz;
                writeln('reszta: ',reszta);
             end;
writeln('dzielna: ',dn);
writeln('dzielnik: ',dk);
writeln('wynik z dzielenia :',wynik,'reszty :',reszta);
readln;
end.

program nie dziala poprawnie. wyswietlam zmienne po to, by widziec co on tam sobie powymyslal. ->uporalam sie juz, jak sadze, z "dziel"

  • bloczek, ktory powinien 'dzielic pisemnie' nadal przypisuje 0 gdzie mu sie podoba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1