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

Funkcija vrshi deljenje dva niza???

[es] :: C/C++ programiranje :: Funkcija vrshi deljenje dva niza???

[ Pregleda: 3828 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ramirez

Član broj: 13160
Poruke: 318
*.219.EUnet.yu



Profil

icon Funkcija vrshi deljenje dva niza???21.08.2003. u 18:38 - pre 251 meseci
Dakle fukcija dobije dva niza od po 50 elemenata (svako polje po jedna cifra). I onda treba da ih podeli kao da se radi od dva velika broja.... napominjem da ne mora da se radi o dva pedesetocifrena broja vec recimo o jednom pedesetocifrenom i jednom desetocifrenom broju.... pri chemu obrnuti sluchaj moze biti zanemaren!!!

Ja matematiku ne znam, ali smatram da je ovakvo deljenje nemoguce na nivou pojedinachnih cifara.... Ideja je bila da se dele binarni brojeve (ako je to lakshe) mada ja ni to ne znam!!! Zna windows calculator ali me mrzi da provaljujem princip...

Ajde da chujem ideje???
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
*.pexim.co.yu



+62 Profil

icon Re: Funkcija vrshi deljenje dva niza???22.08.2003. u 09:13 - pre 251 meseci
Ako se ne varam, ti si ovo pitanje postavio na jos jednoj konferenciji...i nisi dobio odgovor. Evo ti neka moja razmisljanja, pa ti vidi.
1) Zasto insistiras na operacijama tipa "cifra po cifra"? Zasto ne recimo "8 cifara, pa sledecih 8 cifara"? Ako lepo uradis prenos vrednosti, ubrzanje je drasticno.
2) Prenos; radio si nekad rucno mnozenje i deljenje. Za mnozenje je lako, ali za deljenje...dacu neki primer:

1234567890123456 : 987654321

Recimo da nas procesor ume da deli sa brojevima od max 5 cifara; to znaci da ono gore ne moze da podeli, jer ne moze da "prihvatii" broj 987654321. Ali, da li je to neophodno? Da li bi mogao da dobije upotrebljiv medju-rezultat (jednocifren broj) ako bi recimo delio sa aproksimacijom 9876 (ili 9877 - zaokruzivanje)? Da pojasnim kako sam dosao do ovog broja, i uopste, celu ideju.
Posto nas procesor lepo radi sa 5-tocifrenim brojevima, od deljenika (levi broj) cemo uzeti prvih 5 cifara - 12345 (NE zaokruzen), a od delioca (desni broj) cemo uzeti prve 4 cifre (1 cifra manje) - 9876. Podelimo to (div) , i dobijemo jednocifren broj E =1 (medjurezultat). E sad smo na konju; posto si vec uradio mnozenje velikih brojeva, pomnozis kompletan delilac (987654321) sa E i dobijes rezultat R1=987654321. Sad sledi caka: od cega oduzeti R1? Od kompletnog deljenika? Pogresno. Posto delilac ima 9 cifara, uzecemo (9+1) cifru (sleva) deljenika - 1234567890 i od njega oduzeti nas R1; dobijemo ostatak O1=246913569. Na ovaj ostatak se nakaleme preostale cifre deljenika (123456) i dobijemo novi broj za deljenje 246913569123456. Zatim se sve ponavlja, i na taj nacin, cifru po cifru, dodjes do konacnog rezultata.
Ne znam da li sam bio dovoljno jasan; treba se samo prisetiti kako su nas ucili u skoli rucno deljenje i primeniti aproksimaciju (zaokruzivanje) na deliocu - i stvar radi.

I jedna napomena: VAZNO je da uvek dobijes jednocifren medjurezultat E. Znaci, potrebno je nastelovati odsecanje cifara deljenika i delioca tako da dobijes uvek 1 cifru. U gornjem primeru sam uzeo od deljenika 5 cifara, a od delioca 4; ne mora uvek da bude tako. Mogao sam da uzmem od oba po 5, ali nisam, jer je ocigledno da bih dobio E=0 (nula). Uostalom, to je sad neka logika - pa programeri smo, ce se snadjemo...
Pozdrav i nadam se da sam nesto pomogao

Rajko

P.S. Uz malo dorade, mozes i decimale da odradis...
 
Odgovor na temu

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

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Funkcija vrshi deljenje dva niza???22.08.2003. u 12:12 - pre 251 meseci
Umesto da pitas za ideje, daj odmah kod, pa da ga skupa razradjujemo...
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Ramirez

Član broj: 13160
Poruke: 318
*.242.EUnet.yu



Profil

icon Re: Funkcija vrshi deljenje dva niza???22.08.2003. u 21:39 - pre 251 meseci
Sami ste trazili... Ovo je heder!

#ifndef _header_h_
#define _header_h_
#include <stdio.h>
#include <string.h>

#define MAX 49

typedef unsigned short int USHORT;

void load(USHORT *, USHORT operand[]);
void add(USHORT operand1[], USHORT operand2[], USHORT result[]);
void subtract(USHORT operand1[], USHORT operand2[], USHORT result[]);

#endif

*********************************************************************************
Ovo su funkcije za sabiranje i oduzimanje.... mnozenje josh nije gotovo!
Sve ce pretrpeti promene jer mi se svidela ideja da ne bude jedna cifra
u jednom polju vec 5 cifara... Tako da funkcija za uchitavanje nece moci da bude ovakva!!!
U glavnom programu operand1[MAX]={0}, operand2[MAX]={0}, result[MAX]={0};
Sve radi pri chemu rezultat kod sabiranja mora da se poveca za jedan zbog poslednje cifre prenosa pod uslovom da oba operanda imaju MAX elemenata!!!

#include "header.h"

/* Ucitavanje */

void load(USHORT *n, USHORT operand[])
{
USHORT temp[MAX], i=0;
char buffer;

printf("\nNiz? ");

while((buffer=getchar())!=10)
if(buffer>47 && buffer<58)
temp[i++]=buffer-48;

*n=i;

for(i=0; i<*n; operand[MAX-*n+i+1]=temp[i++]);


for(i=0/*MAX-*n+1*/; i<=MAX; printf("%hu", operand[i++]));
}

/* Sabiranje */

void add(USHORT operand1[], USHORT operand2[], USHORT result[])
{
short i, x=0;

for(i=MAX; i>=0; i--)
{
result=operand1+operand2+x;
x=0;
if(result>9)
{
result-=10;
x++;
}
}

for(i=0; i<=MAX+1; printf("%hu", result[i++]));
}

/* Oduzimanje */

void subtract(USHORT operand1[], USHORT operand2[], USHORT result[])
{
short i, x=0;

for(i=MAX; i>=0; i--)
{
if(operand1<operand2+x)
{
result=(operand1+=10)-operand2-x;
x=0;
x++;
}
else
{
result=operand1-operand2-x;
x=0;
}
}

for(i=0; i<=MAX; printf("%hu", result[i++]));
}
 
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: Funkcija vrshi deljenje dva niza???22.08.2003. u 22:43 - pre 251 meseci
Jel može to da se okači u vidu nekog "targuz"-a ili zip-a ovde?
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

srki
Srdjan Mitrovic
Auckland, N.Z.

Član broj: 2237
Poruke: 3654
*.xtra.co.nz



+3 Profil

icon Re: Funkcija vrshi deljenje dva niza???23.08.2003. u 02:53 - pre 251 meseci
leko, pa ti si moderator. edituj mu post i ubaci code tagove.
 
Odgovor na temu

Ramirez

Član broj: 13160
Poruke: 318
*.beotel.net



Profil

icon Re: Funkcija vrshi deljenje dva niza???25.08.2003. u 18:55 - pre 251 meseci
AH kako je odvratno... ali shta da se radi...

Imam neke nove deleme:
1. unsigned short int niz[MAX]={0};

i kada ga pustim da mi prikaze sve elemente niza svi su nula osim poslednjeg koji je
5242 (ovo sam lupio ali je takav neki broj)???

2. Rajko mi je dao do jaja ideju da ne bude jedno polje jedna cifra. Ja sam odluchio da budu 4 cifre... ali je pravljenje funkcije za unos nizova postalo zajebano... poslacu vam sutra novi kod (koji ne radi, a ja nemam pojma zashto)!!!
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Funkcija vrshi deljenje dva niza???25.08.2003. u 21:12 - pre 251 meseci

Ako želiš da ti elementi niza budu svi nule moraćeš ili da ih sve inicijalizuješ (ti si inicijalizovao samo prvi element u tvom primeru) ili da premestiš promenljivu da bude globalna, jer se takve po podrazumevanom ponašanju postavljaju na sve nule po početku izvršavanja.

f
 
Odgovor na temu

Marko Stankovic

Član broj: 11
Poruke: 306
195.252.103.*



Profil

icon Re: Funkcija vrshi deljenje dva niza???26.08.2003. u 01:01 - pre 251 meseci
Nisam siguran ali mislim ovo kako je on postupio puni niz nulama. Bar je tako po standardu (valjda).
Nego koji ti element ima cudnu vrednost. Nemoj mi reci samo da je niz[MAX] :)
ako je tako onda cccc, indeksi u c-u pocinju od nule tako da ti je poslednji clan niz[MAX-1] :)
I drink to make other people interesting.
 
Odgovor na temu

Ramirez

Član broj: 13160
Poruke: 318
*.bitsyu.net



Profil

icon Re: Funkcija vrshi deljenje dva niza???26.08.2003. u 13:36 - pre 251 meseci
OK koliko je meni poznato niz[9] ima 10 elemenata sa indexima od 0 do 9 (ukljuchujuci i 9), pa samim tim niz[MAX] MAX=49 ima 50 elemenata sa indexima od 0 do 49 (ukljuchujuci 49)....

Ispravite me ako greshim!!!

Ovo je nova funkcija koja treba da upisuje 4 cifre u jedno polje umesto jedne... ali
(uvek to ali) neshto ne radi (verovatno u mojoj glavi)... meni ovo izgleda logichno ali
se ne dogadja nishta ili sve pukne.... ZASHTO???

Code:

/* Ucitavanje */

void load(USHORT *n, USHORT operand[])
{
    USHORT temp[MAX]={0}, i=0, j, x;
    char buffer;

    printf("\nNiz? ");

    while((buffer=getchar())!=10)
        if(buffer>47 && buffer<58)
            temp[i++]=buffer-48;

    *n=i;

    for(i=j=*n-1; j>=0; i--)
        for(x=1; x<=1000; x*=10)
            operand[MAX-*n+i+1]+=(temp[j--]*x);



    for(i=0/*MAX-*n+1*/; i<=MAX; printf("%hu", operand[i++]));
}


Rajko, Rajko!!! Navuche mi bedu na vrat:)
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.verat.net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Funkcija vrshi deljenje dva niza???26.08.2003. u 15:06 - pre 251 meseci
Citat:
OK koliko je meni poznato niz[9] ima 10 elemenata sa indexima od 0 do 9 (ukljuchujuci i 9), pa samim tim niz[MAX] MAX=49 ima 50 elemenata sa indexima od 0 do 49 (ukljuchujuci 49)....

Ispravite me ako greshim!!!

Grešiš.

Niz obrazovan pomoću:
tip niz[MAX]
obezbeđuje memoriju veličine MAX*sizeof(tip), što znači da u njega može stati MAX članova, i to tako da je prvi niz[0], a poslednji niz[MAX-1].

Kada programiraš u C-u, to nimalo ne smeta, pošto ćeš uobičajeno raditi:
for (i=0; i<MAX; i++) ...

Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Funkcija vrshi deljenje dva niza???

[ Pregleda: 3828 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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