Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Shaman Forumaš(ica)
Pridružen/a: 24. 09. 2011. (22:21:43) Postovi: (76)16
Spol:
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
|
[Vrh] |
|
Shaman Forumaš(ica)
Pridružen/a: 24. 09. 2011. (22:21:43) Postovi: (76)16
Spol:
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 22:47 sri, 18. 1. 2012 Naslov: |
|
|
[quote="Shaman"]za broj znamenaka broja, to racunam u drugoj funkciji ali lako ih mogu spojiti u jednu.[/quote]
To slobodno možeš računati u drugoj funkciji, ali pozovi je unutar ove [tt]horner17[/tt].
Tek sam sad skužio da ima i još jedno pitanje :oops:
[quote]Prva grupa 4 zadatak, jel moze netko dati primjer brojeva x,y tako da izmedju njih bude sretan broj takav da a*b bude viseznamenkasti palindrom. [/quote]
Primjer jednog sretnog broja za kojeg je a*b višeznamenkasti palindrom je očito [tex]2^{11}\cdot 3 = 6144[/tex] (a = 11, b = 1, a*b = 11). Prema tome, primjer brojeva x i y koje tražiš je sada očit :)
Shaman (napisa): | za broj znamenaka broja, to racunam u drugoj funkciji ali lako ih mogu spojiti u jednu. |
To slobodno možeš računati u drugoj funkciji, ali pozovi je unutar ove horner17.
Tek sam sad skužio da ima i još jedno pitanje
Citat: | Prva grupa 4 zadatak, jel moze netko dati primjer brojeva x,y tako da izmedju njih bude sretan broj takav da a*b bude viseznamenkasti palindrom. |
Primjer jednog sretnog broja za kojeg je a*b višeznamenkasti palindrom je očito [tex]2^{11}\cdot 3 = 6144[/tex] (a = 11, b = 1, a*b = 11). Prema tome, primjer brojeva x i y koje tražiš je sada očit
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
Shaman Forumaš(ica)
Pridružen/a: 24. 09. 2011. (22:21:43) Postovi: (76)16
Spol:
|
|
[Vrh] |
|
Zenon Forumaš(ica)
Pridružen/a: 09. 09. 2011. (19:14:43) Postovi: (2B1)16
Sarma: -
Lokacija: [tex]\pm\infty[/tex]
|
Postano: 1:43 čet, 19. 1. 2012 Naslov: |
|
|
Zadatak s prošlogodišnjeg kolokvija:
Napišite funkciju koja prima dva cijela broja, te ispisuje njihove zajedničke proste djelitelje (svakog točno
jednom) i vraća sumu i produkt ispisanih brojeva.
[code:1]#include<stdio.h>
void f(int x, int y, int *zbroj, int *produkt){
int p=2;
if (x<0) x=-x;
if (y<0) y=-y;
min=(x<=y ? x : y);
max=(x<=y ? y : x);
*zbroj=0;
*produkt=1;
while (min>1)
{
if (min%p==0 && max%p==0)
{
printf ("%d ",p);
(*zbroj)+=p;
(*produkt)*=p;
}
while (min%p==0)
{
min/=p;
}
p++;
}
}
[/code:1]
Valja li? Ako valja, kolika mu je složenost?
Da ispričam ideju pa ako griješim, recite mi točno gdje:
Ako su negativni, naravno, uzmem im apsolutne vrijednosti.
Trebam zajedničke proste faktore.
Radio sam po algoritmu iz skripte, strana 114. Ništa novo, ali ja nisam kao u službenom rješenju dijelio y s p jer nisam vidio potrebu. Ako prođem s "p" kroz min, nije ni bitno što se događa s max-om, jer sam za svaki p koji dijeli min provjerio djeli li max.
Unaprijed hvala :thankyou:
Zadatak s prošlogodišnjeg kolokvija:
Napišite funkciju koja prima dva cijela broja, te ispisuje njihove zajedničke proste djelitelje (svakog točno
jednom) i vraća sumu i produkt ispisanih brojeva.
Kod: | #include<stdio.h>
void f(int x, int y, int *zbroj, int *produkt){
int p=2;
if (x<0) x=-x;
if (y<0) y=-y;
min=(x<=y ? x : y);
max=(x<=y ? y : x);
*zbroj=0;
*produkt=1;
while (min>1)
{
if (min%p==0 && max%p==0)
{
printf ("%d ",p);
(*zbroj)+=p;
(*produkt)*=p;
}
while (min%p==0)
{
min/=p;
}
p++;
}
}
|
Valja li? Ako valja, kolika mu je složenost?
Da ispričam ideju pa ako griješim, recite mi točno gdje:
Ako su negativni, naravno, uzmem im apsolutne vrijednosti.
Trebam zajedničke proste faktore.
Radio sam po algoritmu iz skripte, strana 114. Ništa novo, ali ja nisam kao u službenom rješenju dijelio y s p jer nisam vidio potrebu. Ako prođem s "p" kroz min, nije ni bitno što se događa s max-om, jer sam za svaki p koji dijeli min provjerio djeli li max.
Unaprijed hvala
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 3:09 čet, 19. 1. 2012 Naslov: |
|
|
Izgleda ok, a najgora slozenost mu je linearna u ovisnosti o manjem broju (ako je taj bas prost).
Da, ok je da se dijeli samo [tt]min[/tt], jer se gledaju zajednicki djelitelji. U sluzbenom rjesenju dijelimo oba broja, da smanjimo zbunjivanje citateljstva. Recimo, u grupi koja ima "svakog kolika mu je najveca zajednicka kratnost" (ili tako nekako formulirano) trebalo bi dijeliti oba broja. Slicno i da smo trazili sve brojeve koji su prosti faktori bilo kojeg od dva broja.
Primijeti: da se dijele oba i uvijet provjerava u ovisnosti o obojici, u bi nekim situacijama radilo sporije (ocito), ali u nekima i brze (npr. ako je min relativno velik prost broj ili mu je najveci prosti faktor velik, a max veci od njega, ali sastavljen od iskljucivo malih prostih faktora). Najgora slozenost bi i dalje bila linearna (ako su oba prosti ili je najveci prosti faktor od [tt]max[/tt] priblizno jednak najvecem prostom faktoru od [tt]min[/tt]).
Izgleda ok, a najgora slozenost mu je linearna u ovisnosti o manjem broju (ako je taj bas prost).
Da, ok je da se dijeli samo min, jer se gledaju zajednicki djelitelji. U sluzbenom rjesenju dijelimo oba broja, da smanjimo zbunjivanje citateljstva. Recimo, u grupi koja ima "svakog kolika mu je najveca zajednicka kratnost" (ili tako nekako formulirano) trebalo bi dijeliti oba broja. Slicno i da smo trazili sve brojeve koji su prosti faktori bilo kojeg od dva broja.
Primijeti: da se dijele oba i uvijet provjerava u ovisnosti o obojici, u bi nekim situacijama radilo sporije (ocito), ali u nekima i brze (npr. ako je min relativno velik prost broj ili mu je najveci prosti faktor velik, a max veci od njega, ali sastavljen od iskljucivo malih prostih faktora). Najgora slozenost bi i dalje bila linearna (ako su oba prosti ili je najveci prosti faktor od max priblizno jednak najvecem prostom faktoru od min).
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
|
|
[Vrh] |
|
Namdev Forumaš(ica)
Pridružen/a: 01. 11. 2011. (19:23:40) Postovi: (29)16
Spol:
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
slonic~tonic Forumaš(ica)
Pridružen/a: 26. 10. 2011. (14:16:34) Postovi: (84)16
Spol:
|
Postano: 11:53 čet, 19. 1. 2012 Naslov: |
|
|
[20 bodova] Napisite funkciju koja prima dva cijela broja x, y i prirodni broj b 2, te ispisuje sve znamenke koje se u
brojevima x i y zapisanim u bazi b pojavljuju na istom mjestu gledano slijeva nadesno. Ako ne znate napraviti tako, funkcija
smije pozicije znamenaka gledati zdesna nalijevo, ali takvo rjesenje donosi najvise 10 bodova.
Funkcija treba vratiti sumu i produkt ispisanih znamenaka.
Primjer: Za brojeve x = 171923 i y = 37592, te bazu b = 10, funkcija treba ispisati brojeve 7, 9 i 2, te vratiti 18
(= 7 + 9 + 2) i 126 (= 7 9 2).
/* pomocna funkcija */
int izokreni_apsolutnu_vrijednost(int x, int b) {
int res = 0;
if (x < 0) x = -x;
while (x > 0) {
res = b * res + (x % b);
x /= b;
}
return res;
}
/* preko izokretanja (promjene redoslijeda znamenaka) brojeva */
void zad1b1(int x, int y, int b, int *sum, int *prod) {
*sum = 0;
*prod = 1;
x = izokreni_apsolutnu_vrijednost(x, b);
y = izokreni_apsolutnu_vrijednost(y, b);
while (x > 0 && y > 0) {
int zx = x % [b]b[/b], zy = y % [b]b[/b];
if (zx == zy) {
printf("%d, ", zx);
*sum += zx;
*prod *= zx;
}
x /= [b]b[/b]; y /= [b]b[/b];
}
}
grijesim li ako smatram da se umjesto [b]b[/b] treba dijeliti sa 10.. jer u pomocnoj funkciji smo izokrenuli broj zapisan u bazi b...
i, znaci dijelimo sa 10 da bi dobili znamenke u bazi b dakle i onda ih usporedujemo.
ili sam sve pomijesala?? :oops: :oops: :oops:
[20 bodova] Napisite funkciju koja prima dva cijela broja x, y i prirodni broj b 2, te ispisuje sve znamenke koje se u
brojevima x i y zapisanim u bazi b pojavljuju na istom mjestu gledano slijeva nadesno. Ako ne znate napraviti tako, funkcija
smije pozicije znamenaka gledati zdesna nalijevo, ali takvo rjesenje donosi najvise 10 bodova.
Funkcija treba vratiti sumu i produkt ispisanih znamenaka.
Primjer: Za brojeve x = 171923 i y = 37592, te bazu b = 10, funkcija treba ispisati brojeve 7, 9 i 2, te vratiti 18
(= 7 + 9 + 2) i 126 (= 7 9 2).
/* pomocna funkcija */
int izokreni_apsolutnu_vrijednost(int x, int b) {
int res = 0;
if (x < 0) x = -x;
while (x > 0) {
res = b * res + (x % b);
x /= b;
}
return res;
}
/* preko izokretanja (promjene redoslijeda znamenaka) brojeva */
void zad1b1(int x, int y, int b, int *sum, int *prod) {
*sum = 0;
*prod = 1;
x = izokreni_apsolutnu_vrijednost(x, b);
y = izokreni_apsolutnu_vrijednost(y, b);
while (x > 0 && y > 0) {
int zx = x % b, zy = y % b;
if (zx == zy) {
printf("%d, ", zx);
*sum += zx;
*prod *= zx;
}
x /= b; y /= b;
}
}
grijesim li ako smatram da se umjesto b treba dijeliti sa 10.. jer u pomocnoj funkciji smo izokrenuli broj zapisan u bazi b...
i, znaci dijelimo sa 10 da bi dobili znamenke u bazi b dakle i onda ih usporedujemo.
ili sam sve pomijesala??
_________________ Lakše je naučiti matematiku nego raditi bez nje.
|
|
[Vrh] |
|
marsupial Forumaš(ica)
Pridružen/a: 09. 01. 2012. (22:46:33) Postovi: (63)16
Spol:
|
Postano: 16:59 čet, 19. 1. 2012 Naslov: |
|
|
možda silly pitanje - ali, za 1.zadatak prošlogodnišnjeg drugog kolokvija u službenim rješenjima, da li je svejedno kako nam ispisuje? tj, oba načina su ok? jer mi u 1 zadatku u B grupi ispada jedan od tih načina, a oni su upravo suprotni - jesu oba ok, odnosno za 20 bodova točni?
možda silly pitanje - ali, za 1.zadatak prošlogodnišnjeg drugog kolokvija u službenim rješenjima, da li je svejedno kako nam ispisuje? tj, oba načina su ok? jer mi u 1 zadatku u B grupi ispada jedan od tih načina, a oni su upravo suprotni - jesu oba ok, odnosno za 20 bodova točni?
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 17:11 čet, 19. 1. 2012 Naslov: |
|
|
[quote="slonic~tonic"]
grijesim li ako smatram da se umjesto [b]b[/b] treba dijeliti sa 10.. jer u pomocnoj funkciji smo izokrenuli broj zapisan u bazi b...
i, znaci dijelimo sa 10 da bi dobili znamenke u bazi b dakle i onda ih usporedujemo.[/quote]
Da, griješiš.
Naime, funkcija [tt]izokreni_apsolutnu_vrijednost(int x, int b)[/tt] vraća broj koji [i]u bazi b ima invertiran zapis od onog koji ima broj x u bazi b[/i]. Preciznije, ako je [tex]x=\sum\limits_{i=0}^{n}a_ib^i[/tex], onda funkcija vrati vrijednost [tex]\sum\limits_{i=0}^{n}a_{n-i}b^i[/tex].
Kada bi se u funkciji [tt]zad1b1[/tt] trebalo dijeliti s 10, a ne s b, onda bi prethodna funkcija morala vraćati [i]broj koji u bazi 10 ima zapis invertiran u odnosu na onaj koji broj x ima u bazi b[/i], odnosno za [tex]x=\sum\limits_{i=0}^{n}a_ib^i[/tex], [tt]izokreni_apsolutnu_vrijednost(int x, int b)[/tt] bi trebalo biti [tex]\sum\limits_{i=0}^{n}a_{n-i}10^i[/tex], a uoči da to nije slučaj. Štoviše, uoči da to uopće nije moguće izvesti kada je b > 10.
slonic~tonic (napisa): |
grijesim li ako smatram da se umjesto b treba dijeliti sa 10.. jer u pomocnoj funkciji smo izokrenuli broj zapisan u bazi b...
i, znaci dijelimo sa 10 da bi dobili znamenke u bazi b dakle i onda ih usporedujemo. |
Da, griješiš.
Naime, funkcija izokreni_apsolutnu_vrijednost(int x, int b) vraća broj koji u bazi b ima invertiran zapis od onog koji ima broj x u bazi b. Preciznije, ako je [tex]x=\sum\limits_{i=0}^{n}a_ib^i[/tex], onda funkcija vrati vrijednost [tex]\sum\limits_{i=0}^{n}a_{n-i}b^i[/tex].
Kada bi se u funkciji zad1b1 trebalo dijeliti s 10, a ne s b, onda bi prethodna funkcija morala vraćati broj koji u bazi 10 ima zapis invertiran u odnosu na onaj koji broj x ima u bazi b, odnosno za [tex]x=\sum\limits_{i=0}^{n}a_ib^i[/tex], izokreni_apsolutnu_vrijednost(int x, int b) bi trebalo biti [tex]\sum\limits_{i=0}^{n}a_{n-i}10^i[/tex], a uoči da to nije slučaj. Štoviše, uoči da to uopće nije moguće izvesti kada je b > 10.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
slonic~tonic Forumaš(ica)
Pridružen/a: 26. 10. 2011. (14:16:34) Postovi: (84)16
Spol:
|
Postano: 17:18 čet, 19. 1. 2012 Naslov: |
|
|
[quote="mdoko"][quote="slonic~tonic"]
grijesim li ako smatram da se umjesto [b]b[/b] treba dijeliti sa 10.. jer u pomocnoj funkciji smo izokrenuli broj zapisan u bazi b...
i, znaci dijelimo sa 10 da bi dobili znamenke u bazi b dakle i onda ih usporedujemo.[/quote]
Da, griješiš.
Naime, funkcija [tt]izokreni_apsolutnu_vrijednost(int x, int b)[/tt] vraća broj koji [i]u bazi b ima invertiran zapis od onog koji ima broj x u bazi b[/i]. Preciznije, ako je [tex]x=\sum\limits_{i=0}^{n}a_ib^i[/tex], onda funkcija vrati vrijednost [tex]\sum\limits_{i=0}^{n}a_{n-i}b^i[/tex].
Kada bi se u funkciji [tt]zad1b1[/tt] trebalo dijeliti s 10, a ne s b, onda bi prethodna funkcija morala vraćati [i]broj koji u bazi 10 ima zapis invertiran u odnosu na onaj koji broj x ima u bazi b[/i], odnosno za [tex]x=\sum\limits_{i=0}^{n}a_ib^i[/tex], [tt]izokreni_apsolutnu_vrijednost(int x, int b)[/tt] bi trebalo biti [tex]\sum\limits_{i=0}^{n}a_{n-i}10^i[/tex], a uoči da to nije slučaj. Štoviše, uoči da to uopće nije moguće izvesti kada je b > 10.[/quote]
shvatila :).. hvala!
mdoko (napisa): | slonic~tonic (napisa): |
grijesim li ako smatram da se umjesto b treba dijeliti sa 10.. jer u pomocnoj funkciji smo izokrenuli broj zapisan u bazi b...
i, znaci dijelimo sa 10 da bi dobili znamenke u bazi b dakle i onda ih usporedujemo. |
Da, griješiš.
Naime, funkcija izokreni_apsolutnu_vrijednost(int x, int b) vraća broj koji u bazi b ima invertiran zapis od onog koji ima broj x u bazi b. Preciznije, ako je [tex]x=\sum\limits_{i=0}^{n}a_ib^i[/tex], onda funkcija vrati vrijednost [tex]\sum\limits_{i=0}^{n}a_{n-i}b^i[/tex].
Kada bi se u funkciji zad1b1 trebalo dijeliti s 10, a ne s b, onda bi prethodna funkcija morala vraćati broj koji u bazi 10 ima zapis invertiran u odnosu na onaj koji broj x ima u bazi b, odnosno za [tex]x=\sum\limits_{i=0}^{n}a_ib^i[/tex], izokreni_apsolutnu_vrijednost(int x, int b) bi trebalo biti [tex]\sum\limits_{i=0}^{n}a_{n-i}10^i[/tex], a uoči da to nije slučaj. Štoviše, uoči da to uopće nije moguće izvesti kada je b > 10. |
shvatila .. hvala!
_________________ Lakše je naučiti matematiku nego raditi bez nje.
|
|
[Vrh] |
|
marsupial Forumaš(ica)
Pridružen/a: 09. 01. 2012. (22:46:33) Postovi: (63)16
Spol:
|
Postano: 18:32 čet, 19. 1. 2012 Naslov: |
|
|
Napisite funkciju koja prima dva cijela broja x, y i prirodni broj b 2, te ispisuje sve znamenke koje se u
brojevima x i y zapisanim u bazi b pojavljuju na istom mjestu gledano slijeva nadesno. Ako ne znate napraviti tako, funkcija
smije pozicije znamenaka gledati zdesna nalijevo, ali takvo rjesenje donosi najvise 10 bodova.
Funkcija treba vratiti sumu i produkt ispisanih znamenaka
[code:1]#include<stdio.h>
int bub(int x, int b, int a[])
{
int i=0, n, temp;
if(x<0) x=-x;
while(x>0)
{
a[i]=x%b;
x=x/b;
i++;
}
n=i;
for(i=0;i<n/2;i++)
{
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
return n;
}
void ispis(int x, int y, int b, int *suma, int *produkt)
{
int znx[100], zny[100], ix, iy, i, g;
*suma=0; *produkt=1;
ix=bub(x, b, znx); iy=bub(y, b, zny);
if(ix<iy) g=ix; else g=iy;
for(i=0;i<g;i++)
{
if(znx[i]==zny[i])
{
printf("%d ", znx[i]);
*suma+=znx[i];
*produkt*=znx[i];
}
}
}
int main(){
int x, y, b, suma, produkt;
scanf("%d%d%d", &x, &y, &b);
ispis(x, y, b, &suma, &produkt);
printf("Suma je %d, produkt je %d", suma, produkt);
return 0;
}[/code:1]
--je li ovo ok, odnosno ono što se traži za potpunu točnost zadatka?
Napisite funkciju koja prima dva cijela broja x, y i prirodni broj b 2, te ispisuje sve znamenke koje se u
brojevima x i y zapisanim u bazi b pojavljuju na istom mjestu gledano slijeva nadesno. Ako ne znate napraviti tako, funkcija
smije pozicije znamenaka gledati zdesna nalijevo, ali takvo rjesenje donosi najvise 10 bodova.
Funkcija treba vratiti sumu i produkt ispisanih znamenaka
Kod: | #include<stdio.h>
int bub(int x, int b, int a[])
{
int i=0, n, temp;
if(x<0) x=-x;
while(x>0)
{
a[i]=x%b;
x=x/b;
i++;
}
n=i;
for(i=0;i<n/2;i++)
{
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
return n;
}
void ispis(int x, int y, int b, int *suma, int *produkt)
{
int znx[100], zny[100], ix, iy, i, g;
*suma=0; *produkt=1;
ix=bub(x, b, znx); iy=bub(y, b, zny);
if(ix<iy) g=ix; else g=iy;
for(i=0;i<g;i++)
{
if(znx[i]==zny[i])
{
printf("%d ", znx[i]);
*suma+=znx[i];
*produkt*=znx[i];
}
}
}
int main(){
int x, y, b, suma, produkt;
scanf("%d%d%d", &x, &y, &b);
ispis(x, y, b, &suma, &produkt);
printf("Suma je %d, produkt je %d", suma, produkt);
return 0;
} |
–je li ovo ok, odnosno ono što se traži za potpunu točnost zadatka?
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 19:35 čet, 19. 1. 2012 Naslov: |
|
|
Ovako, na oko, izgleda ok, no nema li negdje neka napomena o nekoristenju dodatnih nizova?
Ovako, na oko, izgleda ok, no nema li negdje neka napomena o nekoristenju dodatnih nizova?
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
|
|
[Vrh] |
|
marsupial Forumaš(ica)
Pridružen/a: 09. 01. 2012. (22:46:33) Postovi: (63)16
Spol:
|
|
[Vrh] |
|
Zenon Forumaš(ica)
Pridružen/a: 09. 09. 2011. (19:14:43) Postovi: (2B1)16
Sarma: -
Lokacija: [tex]\pm\infty[/tex]
|
|
[Vrh] |
|
gflegar Forumaš(ica)
Pridružen/a: 12. 10. 2011. (15:03:41) Postovi: (10D)16
Spol:
|
Postano: 22:27 čet, 19. 1. 2012 Naslov: |
|
|
[quote="Zenon"]Ne razumijem baš ovaj zadatak.
Prvo bih napravio pomoćnu funkciju za pretvaranje broja u odgovarajuću bazu ( x>0 ):
[code:1]int baza(int x, int b){
int sum=0,pomak=1;
while(x)
{
sum=(x%b)*pomak;
pomak*=10;
x/=b;
}
return sum;
}[/code:1]
I što sada? Znači ne smijem ga "izokrenuti" iz oblika [tex]abcd[/tex] u oblik [tex]dcba[/tex] pa provjeravati zdesna nalijevo da ne izgubim bodove?[/quote]
Kak nikome nije jasno da nema smisla "pretvarati" broj iz baze u bazu... nemate po defaultu broj u bazi 10, nego imate broj koji ima svoju vrijednost, neovisno o bazi [size=5](ajde, zapisan je u bazi 2 u racunalu)[/size] :P
[code:1]int bpower(int a, int base){
int res = 1;
a /= base;
while (a) {
a /= base;
res *= base;
}
return res;
}
void funkcija(int x, int y, int b, int *sum, int *prod){
int dx, dy, tmp;
if (x < 0) x = -x;
if (y < 0) y = -y;
dx = bpower(x, b);
dy = bpower(y, b);
*sum = 0;
*prod = 1;
while (dx && dy) {
if ((tmp = x / dx) == y / dy) {
printf("%d ", tmp);
*sum += tmp;
*prod *= tmp;
}
x %= dx;
y %= dy;
dx /= b;
dy /= b;
}
return;
}[/code:1]
Kak ovo radi:
Ako su brojevi [tex] x = (abcde)_b, y = (fghi)_b[/tex] prvo generira brojeve [tex] dx = (10000)_b, dy = (1000)_b[/tex]
Sa [tt]dx[/tt] i [tt]dy[/tt] pratim na kojoj sam trenutno znamenci.
Nakon toga, tako dugo dok ne potrosim sve znamenke jednog od brojeva usporedjujem prvu znamenku (to mogu tak da cjelobrojno podijelim [tt]x / dx[/tt] i [tt] y / dy[/tt]) i napravim vec ono sto treba onda :).
Onda maknem prvu znamenku oba broja [tt]x %= dx[/tt], i pomaknem [tt]dx[/tt] i [tt]dy[/tt] jedno mjesto udesno (tj. podijelim s [tt]b[/tt]).
I nema nigdje "pretvaranja" iz baze u bazu :)
Zenon (napisa): | Ne razumijem baš ovaj zadatak.
Prvo bih napravio pomoćnu funkciju za pretvaranje broja u odgovarajuću bazu ( x>0 ):
Kod: | int baza(int x, int b){
int sum=0,pomak=1;
while(x)
{
sum=(x%b)*pomak;
pomak*=10;
x/=b;
}
return sum;
} |
I što sada? Znači ne smijem ga "izokrenuti" iz oblika [tex]abcd[/tex] u oblik [tex]dcba[/tex] pa provjeravati zdesna nalijevo da ne izgubim bodove? |
Kak nikome nije jasno da nema smisla "pretvarati" broj iz baze u bazu... nemate po defaultu broj u bazi 10, nego imate broj koji ima svoju vrijednost, neovisno o bazi (ajde, zapisan je u bazi 2 u racunalu)
Kod: | int bpower(int a, int base){
int res = 1;
a /= base;
while (a) {
a /= base;
res *= base;
}
return res;
}
void funkcija(int x, int y, int b, int *sum, int *prod){
int dx, dy, tmp;
if (x < 0) x = -x;
if (y < 0) y = -y;
dx = bpower(x, b);
dy = bpower(y, b);
*sum = 0;
*prod = 1;
while (dx && dy) {
if ((tmp = x / dx) == y / dy) {
printf("%d ", tmp);
*sum += tmp;
*prod *= tmp;
}
x %= dx;
y %= dy;
dx /= b;
dy /= b;
}
return;
} |
Kak ovo radi:
Ako su brojevi [tex] x = (abcde)_b, y = (fghi)_b[/tex] prvo generira brojeve [tex] dx = (10000)_b, dy = (1000)_b[/tex]
Sa dx i dy pratim na kojoj sam trenutno znamenci.
Nakon toga, tako dugo dok ne potrosim sve znamenke jednog od brojeva usporedjujem prvu znamenku (to mogu tak da cjelobrojno podijelim x / dx i y / dy) i napravim vec ono sto treba onda .
Onda maknem prvu znamenku oba broja x %= dx, i pomaknem dx i dy jedno mjesto udesno (tj. podijelim s b).
I nema nigdje "pretvaranja" iz baze u bazu
|
|
[Vrh] |
|
linus Forumaš(ica)
Pridružen/a: 20. 11. 2011. (16:59:13) Postovi: (46)16
Lokacija: subnet mask
|
Postano: 23:07 čet, 19. 1. 2012 Naslov: |
|
|
zadatak iz skripte 11.5.7
bi li netko bio ljubazan pa komentirao i/ili stavio svoje rješenje
meni radi dobro, no je li to presloženo?
[code:1]
#include<stdio.h>
int main(void)
{
int suma=0, znam, temp, p;
int n, i, x[616];
printf("\nKoliko niz ima clanova? ");
scanf("%d", &n);
for(i=0; i<n; i++)
{
p=2;
printf("\nUnesite clan niza #%d: ", i+1);
scanf("%d", &x[i]);
while(!(x[i]%p==0)) p++; /* provjera je li prost */
if(p==x[i]) /* ako je-break */
{
n=i+1; /* bez ovog dijela, iduca petlja izbacuje neke nenormalne brojeve */
break;
}
}
for(i=0; i<n; i++)
{
suma=0;
temp=x[i]; /* cuvamo orginalni clan niza x[i] za ispis */
while(temp>0)
{
znam=temp%10;
suma+=znam;
temp/=10;
}
p=2;
while(!(suma%p==0)) p++;
if(suma==p && suma>17) printf("\n%d", x[i]);
}
return 0;
}
[/code:1]
P.S. ne zamjerite što nije iz kolokvija :oops: , kao što naslov teme nalaže
zadatak iz skripte 11.5.7
bi li netko bio ljubazan pa komentirao i/ili stavio svoje rješenje
meni radi dobro, no je li to presloženo?
Kod: |
#include<stdio.h>
int main(void)
{
int suma=0, znam, temp, p;
int n, i, x[616];
printf("\nKoliko niz ima clanova? ");
scanf("%d", &n);
for(i=0; i<n; i++)
{
p=2;
printf("\nUnesite clan niza #%d: ", i+1);
scanf("%d", &x[i]);
while(!(x[i]%p==0)) p++; /* provjera je li prost */
if(p==x[i]) /* ako je-break */
{
n=i+1; /* bez ovog dijela, iduca petlja izbacuje neke nenormalne brojeve */
break;
}
}
for(i=0; i<n; i++)
{
suma=0;
temp=x[i]; /* cuvamo orginalni clan niza x[i] za ispis */
while(temp>0)
{
znam=temp%10;
suma+=znam;
temp/=10;
}
p=2;
while(!(suma%p==0)) p++;
if(suma==p && suma>17) printf("\n%d", x[i]);
}
return 0;
}
|
P.S. ne zamjerite što nije iz kolokvija , kao što naslov teme nalaže
|
|
[Vrh] |
|
Zenon Forumaš(ica)
Pridružen/a: 09. 09. 2011. (19:14:43) Postovi: (2B1)16
Sarma: -
Lokacija: [tex]\pm\infty[/tex]
|
Postano: 23:09 čet, 19. 1. 2012 Naslov: |
|
|
Super kolega, hvala :D
De te mi samo još objasnite ovu pomoćnu funkciju gore. Koračno :P
:thankyou:
[size=5]Sad namjerno i ja tebi pišem malim slovima, da moraš trošiti vrijeme na gluposti :D Ugl, kad objasniš ovo gore, stiže la pohva :D P.S. Nije mi jasno jer više ni ne razmišljam, muka mi je od programiranja više, želim učiti analizu i linearnu, ali istovremeno ne želim pasti programiranje xD[/size]
Super kolega, hvala
De te mi samo još objasnite ovu pomoćnu funkciju gore. Koračno
Sad namjerno i ja tebi pišem malim slovima, da moraš trošiti vrijeme na gluposti Ugl, kad objasniš ovo gore, stiže la pohva P.S. Nije mi jasno jer više ni ne razmišljam, muka mi je od programiranja više, želim učiti analizu i linearnu, ali istovremeno ne želim pasti programiranje xD
|
|
[Vrh] |
|
|