Skocz do zawartości

Maciejuś

Stały użytkownik
  • Postów

    11
  • Dołączył

  • Ostatnia wizyta

Osiągnięcia Maciejuś

Newbie

Newbie (1/14)

0

Reputacja

  1. Zrobiłem część programu po swojemu. Zadeklarowałem tablice o typie string. Mam teraz problem z mnożeniem. Pierwsza liczba pod kreską dobrze wychodzi, ale druga, trzecia i następne już nie. W czym tkwi błąd? Bardzo prosze o pomoc. program mnozenie_pisemne;uses crt;type tablica = array[1..12,1..20] of string;var tab: tablica; a,b,la,lb: longint; s: string; i,j,dlgA,dlgB,pom, prze: byte;beginclrscr;{ czytanie 2 liczb }writeln('Podaj pierwszĄ liczb©');readln(a);writeln;writeln('Podaj drugĄ liczb©');readln(b);{ liczenie d�ugo�ci liczb }Str(a,s);dlgA:=length(s);str(b,s);dlgB:=length(s);writeln;writeln('D�ugo�† liczby pierwszej: ',dlgA,'. D�ugo�† liczby drugiej: ',dlgB,'.');{ sprawdzanie czy ujemne }If a<0 then begin a:=a*-1; dlgA:=dlgA-1; tab[1,20-dlgA]:='-'; end;If b<0 then begin b:=b*-1; dlgB:=dlgB-1; tab[2,20-dlgB]:='-'; end;lb:=b;la:=a;{ wpisywanie pierwszej liczby do tabeli }i:=1;for j:=20 downto 21-dlgA do begin pom:= a mod 10; a:= a div 10; str(pom,s); tab[i,j]:=s; end; { wpisywanie drugiej liczby do tabeli }i:=2;for j:=20 downto 21-dlgB do begin pom:= b mod 10; b:= b div 10; str(pom,s); tab[i,j]:=s; end;readln;{znak mnoľenia i podkre�lenie}If dlgA>dlgB then begin i:=3; for j:=20 downto 18-dlgA do begin tab[i,j]:='-'; end; tab[2,18-dlgA]:='X'; end else begin i:=3; for j:=20 downto 18-dlgB do begin tab[i,j]:='-'; end; tab[2,18-dlgB]:='X'; end;prze:=0;If (la=0) or (lb=0) then begin tab[4,20]:='0'; end else begin For j:=1 to dlgB do begin b:=lb mod 10; lb:=lb div 10; For i:=1 to dlgA do begin a:=la mod 10; la:=la div 10; If la=0 then begin la:=a; end; pom:=a*b+prze; prze:=0; If pom>9 then begin prze:=pom div 10; pom:=pom mod 10; end; str(pom,s); tab[3+j,22-i-j]:=s; end; If prze>0 then begin str(prze,s); tab[4,20-i]:=s; end; end; end;writeln('Przeniesienie: ',prze);writeln('b:= ',b);writeln('lb:= ',lb);writeln('la:= ',la);{ wy�witlanie tabeli}for i:= 1 to 12 do begin writeln; for j:= 1 to 20 do begin write(tab[i,j]:1); end; end;readln;end.
  2. Nie dałoby się zrobić tak, aby wielkość tablic była zależna od wielkości wyniku i dwóch liczb wprowadzonych?
  3. Ma tylko wyświetlić schemat mnożenia. Nic więcej. Jak się zdeklaruje tablice na 20 liczb to wynik może być najwyżej 20-cyfrowy?
  4. program mnozenie;uses crt;varliczbaA,LiczbaB,wynik: longint;dlgA, dlgB, dlgW, zmA, zmB, zmW: byte;beginclrscr;Writeln('Podaj pierwsza liczbe');readln(LiczbaA);clrscr;writeln('Podaj druga liczbe');readln(LiczbaB);zmA:=LiczbaA;zmB:=LiczbaB;dlgA:=0;dlgB:=0;if zmA<0 then begin dlgA:=dlgA + 1; zmA:=-1*zmA; end;if zmB<0 then begin dlgB:=dlgB + 1; zmB:=-1*zmB; end;while zmA>0 do begin zmA:=zmA div 10; dlgA:=dlgA + 1; end;while zmB>0 do begin zmB:=zmB div 10; dlgB:=dlgB + 1; end;clrscr;wynik:=LiczbaB*LiczbaA;if zmW<0 then begin dlgW:=dlgW + 1; zmW:=-1*zmW; end;while zmW>0 do begin zmW:=zmW div 10; dlgW:=dlgW + 1; end;writeln(' ');gotoxy(20,2);writeln(' ', LiczbaA);gotoxy(20,3);Writeln('*', LiczbaB);gotoxy(20,4);writeln('-------------------');gotoxy(20,5);writeln(wynik);writeln('Wcisnij ENTER aby zakonczyc program.');readln;end. Narazie wygląda tak mój beznadziejny program. Nie będe się powtarzał co chce jeszcze z nim zrobić bo to napisałem parę postów wyżej.
  5. Skoro tak napisałeś to pewnie skrót "int" oznacza "Integer". Wcześniej myślałem, że to coś związanego z tablicami :razz: Na razie jeszcze mam ukończonego algorytmu, więc nie będe się ośmieszał. Pzatym nie wiem jak skopiować kod z TP do np. Notatnika. Mam jeszcze do zrobienia wyrównanie liczb i dodawanie części składowych. Znacie jakiś prostrzy sposób na wyrównanie liczb do prawej strony niż stosowanie polecenia gotoxy(x,y) , liczenia znaków w liczbach i odpowiednie wykonywanie obliczeń na nich ?
  6. Ten kurs co mi Vegan nadesłał jest bardzo słaby. Mam lepszy na kompie. Jakbyś chciał wiedzieć ayem to czytałem regulamin. Tam nie pisze, że pomoc jest niedozwolona. Jeśli chodzi o ten program to chciałem zrobić to mnożenie za pomocą funkcji mod, div i pętli for i Longinta. Mój problem to to w jaki sposób ułożyć te liczby, aby ładnie się równały do prawej strony i problem ze zmiennymi przypisanymi do składników dodawania (są zależne od liczby cyfr jednej z mnożonych liczb) - myśle że najlepiej by dać do tablicy, ale też nie chce tej tablicy przypisywać ścisłej wielkości..
  7. No właśnie mogą być do 10 cyfr. Tyle że dodatnie i ujemne.
  8. Teraz o wiele więcej kapuje. Da się to zrobić prościej - tzn. bez używania operacji na tablicach i ciągach znaków ? Mi ktoś inny doradzał że będzie najprościej z tablicami i ciągami znaków ale jak się da prościej to prosze o wytłumaczenie. Największy problem w tej chwili mam z takim podpisaniem składników mnożenia i dodawania, aby z prawej strony się ładnie wyrównały przy różnej długości liczb (normalnie są wyrównane do lewej).
  9. Nie pomogłeś mi za wiele :unsure: Jest tu ktoś kto się zna na tym lepiej od Vegana ?
  10. Co to są "inty" i "ifa" ? Z tego co napisałeś Vegan to niewiele kapuje. Czytałem o tablicach i zamianie na stringi ale jest to zbyt skomplikowane dla mnie. Cyfry tych 2 liczb trzeba wstawiać do osobnych kratek czy jak? Mógłby ktoś wstawić kod takiego programu? Najlepiej się uczyć na przykładzie.
  11. W jaki sposób zrobić program w Pascalu, który mnoży dwie dowolne liczby i wyświetla ilustrację ich pisemnego mnożenia. Domyślam się, że najlepiej wykorzystać tablice lub stringi, ale niestety nie za bardzo umiem wykonywać operacji i na jednym i na drugim. Z góry dzięki!
×
×
  • Dodaj nową pozycję...