Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

sabiranje i množenje 6cifrenih brojeva

[es] :: Pascal / Delphi / Kylix :: sabiranje i množenje 6cifrenih brojeva

[ Pregleda: 1321 | Odgovora: 8 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

atlas

Član broj: 20158
Poruke: 168
*.as.ka.bih.net.ba.



Profil

icon sabiranje i množenje 6cifrenih brojeva26.04.2004. u 22:30

Kako napraviti u PASCALU program da prepoznaje brojeve vece od onih kojih nam on dozvoljava??
primjer;

treba mi program koji traži da unesemo dva broja sa 6 cifara i da napiše njihov zbir i proizvod?

[Ovu poruku je menjao -zombie- dana 27.04.2004. u 18:18 GMT]
26.04.2004. u 22:30 

reiser
Beograd

Član broj: 7895
Poruke: 1903
195.252.85.*



Profil

icon Re: pascal-(..PROGRAM)????????????????I need that26.04.2004. u 23:25
Pa stavi broj kao LongInt.
26.04.2004. u 23:25 

atlas

Član broj: 20158
Poruke: 168
*.as.ka.bih.net.ba.



Profil

icon Re: pascal-(..PROGRAM)????????????????I need that27.04.2004. u 08:44
Ne moze preko tipa LONGINT.
Skoro je bilo na takmicenju,kazu da se moze uraditi.
VJEROVATNO POSTOJI NEKA CAKA..
mozda nekako preko brojnih stringova
27.04.2004. u 08:44 

Sasa A
Sasa Adzic
C:\Montenegro\Podgorica

Član broj: 18654
Poruke: 143
*.crnagora.net



Profil

icon Re: pascal-(..PROGRAM)????????????????I need that27.04.2004. u 08:49
Mozes da koristis nizove, dakle svaka cifra jedan clan niza ili da koristis liste
27.04.2004. u 08:49 

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3643
*.dialup.xtra.co.nz



Profil

icon Re: pascal-(..PROGRAM)????????????????I need that27.04.2004. u 13:57
Evo ja cu da ti dam ideju pa ti uradi nesto a mi cemo da ispravimo greske.
Definisi a,b,c i d kao longint. Ucitaj prva dva broja u neka dva stringa.
Prva 3 karaktera u prvom stringu pretvori u broj i smesti u a. druga 3 karaktera pretvori u broj i smesti u b (imas funkcije za to, ne secam se imena funkcija davno sam se igrao sa Pascalom).
Isto tako uradi sa drugim brojem i smeti odgovarajuce brojeve u c i d.
Sada uradi ovo:
poslednje3cifre:=b*d mod 1000;
pretposlednje3cifre:=(b*d div 1000) + ((a*d+b*c) mod 1000);
prvih6cifara:=a*c+ ((a*d+b*c) div 1000);
Write(prvih6cifara:6, pretposlednje3cifre:3, poslednje3cifre:3);

To resenje se dobija iz sledece formule:
(a*10000+b)*(c*10000+d)=a*c*1000*1000+a*d*1000+b*c*1000+b*d

To ti je resenje za mnozenje a za sabiranje ne moras da izvodis nikakve formule nego samo pretvori prva 2 stringa u longintove i saberi ih.
27.04.2004. u 13:57 

Bojan Kopanja
Bojan Kopanja
Senior Web Developer, Master-Develop
Stara Pazova

Član broj: 6155
Poruke: 499
*.ptt.yu.

ICQ: 346697685
Sajt: www.zeussoftware.rs


Profil

icon Re: sabiranje i množenje 6cifrenih brojeva27.04.2004. u 19:31
Ako ne moze longint, moze li extended? Sa ovim tipom mozes da vrsis operacije i samnoooooogo vecim brojevima od onih sa sest cifaraa ...

p0z.
27.04.2004. u 19:31 

Bojan Kopanja
Bojan Kopanja
Senior Web Developer, Master-Develop
Stara Pazova

Član broj: 6155
Poruke: 499
*.ptt.yu.

ICQ: 346697685
Sajt: www.zeussoftware.rs


Profil

icon Re: pascal-(..PROGRAM)????????????????I need that27.04.2004. u 19:35
Citat:
srki:
Evo ja cu da ti dam ideju pa ti uradi nesto a mi cemo da ispravimo greske.
Definisi a,b,c i d kao longint. Ucitaj prva dva broja u neka dva stringa.
Prva 3 karaktera u prvom stringu pretvori u broj i smesti u a. druga 3 karaktera pretvori u broj i smesti u b (imas funkcije za to, ne secam se imena funkcija davno sam se igrao sa Pascalom).
Isto tako uradi sa drugim brojem i smeti odgovarajuce brojeve u c i d.
Sada uradi ovo:
poslednje3cifre:=b*d mod 1000;
pretposlednje3cifre:=(b*d div 1000) + ((a*d+b*c) mod 1000);
prvih6cifara:=a*c+ ((a*d+b*c) div 1000);
Write(prvih6cifara:6, pretposlednje3cifre:3, poslednje3cifre:3);

To resenje se dobija iz sledece formule:
(a*10000+b)*(c*10000+d)=a*c*1000*1000+a*d*1000+b*c*1000+b*d

To ti je resenje za mnozenje a za sabiranje ne moras da izvodis nikakve formule nego samo pretvori prva 2 stringa u longintove i saberi ih.


Eh, da... ovo me pomalo podseca na mnozenje u dvostrukoj preciznosti koje se "povlaci" jos od asemblera ...

27.04.2004. u 19:35 

bancika
Branislav Stojkovic
Nis, New York

Član broj: 24844
Poruke: 620
195.252.103.*

ICQ: 84215453
Sajt: www.storm-software.co.yu/..


Profil

icon Re: sabiranje i množenje 6cifrenih brojeva28.04.2004. u 13:00
ucitavaj direktno u niz cifara, i to u inverznom redosledu tako da cifra najvece tezine bude skroz desno. tako ti je lakse da uradis ako imas prenos cifara, da ne shiftas cifre. ne moras cak nigde da koristis (long) integer. aj ako me ne mrzi poslacu ti source u toku dana...
pozdravi
Ride the rainbow, crack the sky
28.04.2004. u 13:00 

bancika
Branislav Stojkovic
Nis, New York

Član broj: 24844
Poruke: 620
195.252.103.*

ICQ: 84215453
Sajt: www.storm-software.co.yu/..


Profil

icon Re: sabiranje i množenje 6cifrenih brojeva28.04.2004. u 14:18
evo ti kod. napisao sam u delphi, al ako ne umes da prebacis onda bem li ga :)

Code:

program Mnozenje;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var A, B, C, D: string;
    Action: char;

function Vrednost(c: char): byte;
begin
  Result := Ord(c) - 48;
end;

procedure Saberi(A, B: string; var C: string);
var p, i: byte;
begin
  //da se izjednace duzine A, B i C
  while Length(A) > Length(B) do
    B := '0' + B;
  while Length(A) < Length(B) do
    A := '0' + A;
  SetLength(C, Length(A));

  //sabiranje cifra po cifra
  p := 0;
  for i := Length(A) downto 1 do
   begin
     C[i] := Chr((p + Vrednost(A[i]) + Vrednost(B[i])) mod 10 + 48);
     p := (p + Vrednost(A[i]) + Vrednost(B[i])) div 10;
   end;

  //ako ima prenos dodati na pocetak
  if p > 0 then
   C := Chr(p + 48) + C;
end;

procedure Mnozi(A, B: string; var C: string);
var i, j, p: byte;
    temp: char;
begin
  //da se izjednace duzine A, B i C i postaviti C na 0;
  while Length(A) > Length(B) do
    B := '0' + B;
  while Length(A) < Length(B) do
    A := '0' + A;
  SetLength(C, 2 * Length(A));
  for i := 1 to Length(C) do
   C[i] := '0';

  //mnozenje cifra po cifra
  p := 0;
  for i := Length(A) downto 1 do
   begin
     for j := Length(A) downto 1 do
       begin
         temp := Chr((p + Vrednost(C[i + j]) + Vrednost(A[i]) * Vrednost(B[j])) mod 10 + 48);
         p := (p + Vrednost(C[i + j]) + Vrednost(A[i]) * Vrednost(B[j])) div 10;
         C[i + j] := temp;
       end;
     //ako ima prenosa dodati na pocetak tekuceg sabirka
     if p > 0 then
      begin
        C[i] := Chr(p + 48);
        p := 0;
      end;
   end;

  //obrisati prve nule
  while C[1] = '0' do
    Delete(C, 1, 1);
end;

begin
  while True do
   begin
     Write('A = '); ReadLn(A);
     Write('B = '); ReadLn(B);
     WriteLn;
     Saberi(A, B, C);
     WriteLn('A + B = ', C);
     Mnozi(A, B, D);
     WriteLn('A * B = ', D);
     WriteLn(#13, 'Nastaviti? (D/N)');
     ReadLn(Action);
     if UpCase(Action) = 'N' then
      Break;
   end;
end.


pozdravi
Ride the rainbow, crack the sky
28.04.2004. u 14:18 

[es] :: Pascal / Delphi / Kylix :: sabiranje i množenje 6cifrenih brojeva

[ Pregleda: 1321 | Odgovora: 8 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.