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

Preklapanje operatora oduzimanja

[es] :: C/C++ programiranje :: Preklapanje operatora oduzimanja

[ Pregleda: 3333 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nemanja
Informatiker

Član broj: 4663
Poruke: 1539
*.mobtel.co.yu



+583 Profil

icon Preklapanje operatora oduzimanja27.08.2003. u 21:00 - pre 251 meseci
Operator preklapanja sabiranje pri cemu su sabirci veliki brojevi uneseni kao nizovi karaktera ide nekako ovako u C++ :
Code:

// "velbroj.cpp"

#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include "velbroj.hpp"

bignum bignum::operator+(bignum drugi)  //definicija
{
    //inicijalizuj objekat z i nadji duzine stringova
    bignum z;
    int i = strlen(broj) - 1, j = strlen(drugi.broj) - 1;
    //ako su brojevi numerici uradi sabiranje
    if (numerik(broj, i) && numerik(drugi.broj, j)) {
    int prenos = 0, br, k = (i > j ? i : j);    //u pocetku pamti
    prenos = 0 i nadji k = max(i, j) z.broj[k + 1] = '\0';  //postavi velicinu
    for (i, j; i >= 0 || j >= 0; i--, j--)
    // br=numerik od (br1 + br2) + ono sto se pamti
    {
        br = (i < 0 ? 0 : broj[i] - 48) + (j <
                           0 ? 0 : drugi.broj[j] -
                           48) + prenos;
        prenos = br > 9 ? br -= 10, 1 : 0;  //ako je rezultat>9 onda pamti 1, a broj smanji za 10 
        z.broj[k--] = br + 48;
    }  //kraj for petlje
    if (prenos == 1) {
        char *temp = "1";
        strcat(temp, z.broj);
        strcpy(z.broj, temp);
    }
    } else
    cout << "greska pri sabiranju brojeva!" << endl;
    /* prenosi kao rezultat objekat z (napomena: ako bi koristili objekt drugi
       ili * this, menjala bi se vrednost njihovih argumenta) */
    return z;
}

int bignum::numerik(char *num, int duz) //definicja
{
    for (int i = duz; i >= 0; i--)
    if (num[i] < '0' || num[i] > '9') {
        cout << "greska, broj:";
        prikaz();
        cout << " nije numerik! " << endl;
        return 0;
    }
    return 1;
}


Bilo bi mi od velike pomoci ukoliko neko vec zna ove sablonske skolske zadatke da mi pomogne da napisem isto to samo za oduzimanje!
Trenutno mi je mozak stao, sto ne znaci da vec nece biti bolje!

Unapred se izvinjavam ako postoji pravilo o ne pomoganju oko skolskih zadataka a sa kojim nisam upoznat!
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.telia.com

Sajt: dejan.lekic.org


+2 Profil

icon Re: Preklapanje operatora oduzimanja27.08.2003. u 23:35 - pre 251 meseci
Ja nisam imao vremena da duboko analiziram problem, prvenstveno zato jer nisam uopste stekao dojam da si se potrudio da ista uradis - ovaj kod koji si poslao ovamo moze biti bilo ciji, jel'da?
Potrudio sam se ipak malo da onu sumu karaktera pretvorim u koliko-toliko citljiv kod tako sto sam propustio isti kroz GNU Indent i onda stavio u phpBB tagove... To si mogao i sam da uradis - sa leve strane polja za unos teksta (kada editujes odgovor>) imas lep, krataj i jasan "help" sa objasnjenjem za neke obicne vidove formatiranja teksta... Pogledaj ih.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Nemanja
Informatiker

Član broj: 4663
Poruke: 1539
*.mobtel.co.yu



+583 Profil

icon Re: Preklapanje operatora oduzimanja28.08.2003. u 11:41 - pre 251 meseci
Code:


 bignum bignum::operator- (bignum drugi)
 {
  bignum z;
  int i=strlen(broj)-1,j=strlen(drugi.broj)-1,k=(i>j?i:j);
  int prenos=0,br,pom,t1,t2,znak=0,veci;
  char duzi[100],kraci[100];
  if (i>j) {strcpy(duzi,broj);strcpy(kraci,drugi.broj);}
  else if (j>i) {strcpy(duzi,drugi.broj);strcpy(kraci,broj);}
  else
  {
  veci=strcmp(broj,drugi.broj);

      if (veci>0)  {strcpy(duzi,broj);strcpy(kraci,drugi.broj);}
      else {strcpy(duzi,drugi.broj);strcpy(kraci,broj);}
   };

   z.broj[k+1]=0;
   for (i,j;i<=0 || j<=0;i--,j--)
   {
   br=(i<0?0:duzi[i]-48)-(j<0?0:kraci[j]-48)-prenos;
   if (br<0)
   { br=((i<0?0:duzi[i]-48)+10)-(j<0?0:kraci[j]-48);prenos=1;}
   else prenos=0;
   }
   z.broj[k--]=br+48;


  return z;
}; 

***********************************************************

Mogao bih reci da se nisam ni potrudio, medjutim juce nisam imao vremena, a
problem kod oduzimanja mi je bio nisam radio sa njim . Ako hoces zatvori temu a
ja cu jos raditi.

[Ovu poruku je menjao Nemanja dana 28.08.2003. u 17:04 GMT]
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Preklapanje operatora oduzimanja28.08.2003. u 12:58 - pre 251 meseci
da li si ti video šta ti je dejan rekao? kako da postaviš kod? misliš da ja mogu da dešifrujem gde je trebalo [ i ] a ne html oznaka za italic? ubaciš lepo [ code ] i [/ code ] pre i nakon koda i sve će biti mnogo čitljivije...
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

[es] :: C/C++ programiranje :: Preklapanje operatora oduzimanja

[ Pregleda: 3333 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

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