Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.285
|
čitano: 1.712.630
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Zodiak kaže...

program je samo vjezba ,a ono sta me zanima je kako ispisat ga u txt

te zasto dolazi do greska kada dodam FILE *fp i ostalo sta ide uz to jer program bez toga i  f-ova uz printf i scanf radi ono sto treba

program uzima najveci broj iz niza i najmanji makar ce 1 uvjek biti najmanj ali dobro nije u tome stvar

 

Evo, ovako ćeš upisati brojeve u txt datoteku. Ali stvarno moraš nešto pročitati o toj funkciji jer ima dosta parametara, moraš znati kad kojeg staviti. Ovaj parametar w znači da otvaraš datoteku za pisanje, da će se datoteka kreirati ukoliko ne postoji i da će se postojeći sadržaj izbrisati kod pisanja ako postoji. Dakle, valjda ti je sad jasnje zašto je domagoj dao link, zašto bi pisali ovdje te stvari, kad su već napisane.

Ovo je upis 5 brojeva jedan ispod drugog.

 

#include <stdio.h>


int main()
{
    int broj;
    FILE* upis = fopen("C://brojevi.txt", "w"); // otvaranje datoteke za upis
    for(int i=0; i<5; i++)
    {
       scanf("%d", &broj);  // unos broja preko konzole
       fprintf(upis, "%d\n", broj);  // upis broja u text datoteku
    }
    fclose(upis); // zatvaranje datoteke za upis
    return 0;
}


 

Poruka je uređivana zadnji put ned 3.11.2013 19:38 (Floki).
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

@rustweaver

 

program sam napravio normalo ,poslje sam krenuo stavljat f jer sam htio to sve ispisat u datoteku

te mi zatim nije radilo

znam sto fprintf i fscanf znace ali ih ocito ne znam korisiti

moje pitanje je bilo od pocetka kako i kada koiristiti fprintf i fscanf,a to bi odgovorilo i na ostala pitanja koja me muce

 

evo da svima bude malo jasnije

 

ovo je isti program od prije samo bez file  i f-ova

kako ono sta ovaj program ispise u cmd prozor ,ispisem u neku datotek npr txt?

na sta moram paziti?

 

 

#include<stdio.h>
#include<math.h>

int main()
{
    int n;
    int niz[31];
    int najveci=0;
    int najmanji=1;
   
    // UNOS n BROJA
    do
    {
    printf("\n\tUNESI BROJ 0<n<=30 \n");
    scanf("%i",&n);
    if(n>0 && n<=30) break;
    printf("\n POGRESAN UNOS ");
    }
    while(!(n>0 && n<=30));
    printf(" \n \t NIZ BROJEVA \n ");
    // ISPIS NA EKRAN NIZA OD N BROJEVA - TRAZENJE NAJVECEG I NAJMANJEG BROJA
    for(n=n;n>=1;n--)
    {
       niz[n]=n;
       if(niz[n]>najveci)
          najveci=niz[n];
      
       if(niz[n]<najmanji)
          najmanji=niz[n];
       printf(" \n \t %i \n ",niz[n]);
    }
    // ISPIS NAJMANJEG I NAJVECEG BROJA
    printf(" \n NAJVECI BROJ U NIZU %i \n \n ",najveci);
    printf(" \n NAJMANJI BROJ U NIZU %i \n \n ",najmanji);
    if(niz[10]==10)
       printf(" ADRESA 10 POHRANILA JE BROJ %i \n",niz[10]);



    return 0;
}

Moj PC  
0 0 hvala 0
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Ti si ovo napravio, otvori datoteku na toj putanji i vidi.

 

 

#include <stdio.h>


int main()
{
    int n, i;
    scanf("%d", &n);
    FILE* s = fopen("C://brojevi.txt", "w");
    for(i = n; i>=1; i--)
    {
       fprintf(s, "%d ", i);
    }
    fprintf(s, "\nNajveci: %d", n);
    fprintf(s, "\nNajmanji: %d", i+1);
    if(n>=10)
    {
       fprintf(s, "\nAdresa 10: %d", 10);
    }
    fclose(s);
    return 0;
}


 

 

Poruka je uređivana zadnji put ned 3.11.2013 20:41 (Floki).
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Zodiak kaže...

@rustweaver

 

program sam napravio normalo ,poslje sam krenuo stavljat f jer sam htio to sve ispisat u datoteku

te mi zatim nije radilo

znam sto fprintf i fscanf znace ali ih ocito ne znam korisiti

moje pitanje je bilo od pocetka kako i kada koiristiti fprintf i fscanf,a to bi odgovorilo i na ostala pitanja koja me muce

Jesi li siguran da znaš što znače fprintf i fscanf? Pogledaj ovaj dio:

 

do
{
    fprintf("\n\tUNESI BROJ 0<n<=30 \n");
    fscanf("%i",&n);
    if (n>0 && n<=30) break;
        fprintf("\n POGRESAN UNOS ");
}

 

Možeš li mi odgovoriti zašto si ovdje pokušao koristiti fprintf i fscanf? Zašto ne običan printf i scanf kada je očito da ovaj dio treba biti ispisan na ekran i unos pročitan sa korisnikove tipkovnice?

 

Dakle osim što si nisi naveo potrebne argumente tih funkcija (fscanf i fprintf uzimaju jedan dodatni argument, a to je file handle), još si ih i koristio na krivom mjestu.

 

printf -> formatirani ispis na ekran (stdout)

fprintf -> formatirani ispis u stream (stream je najčešće otvorena datoteka iako ne mora nužno biti)

sprintf -> formatirani ispis u memoriju

 

scanf -> formatirano čitanje sa tipkovnice (stdin)

fscanf -> formatirano čitanje iz streama (također, stream je ovdje najčešće otvorena datoteka, ali ne mora nužno biti)

sscanf -> formatirano čitanje iz memorije

What Andy giveth, Bill taketh away.
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Uglavnom, to se ovako radi:

 

- upis u datoteku i čitanje iz datoteke uz ispis na konzolu.

 

#include <stdio.h>


int main()
{
    int n, i, broj;
    int c = 0;
    scanf("%d", &n);
    FILE* s = fopen("C://brojevi.txt", "w+");
    fprintf(s, "%d\n", n);
    for(i = n; i>=1; i--)
    {
       fprintf(s, "%d ", i);
    }
    fprintf(s, "\n%d", n);
    fprintf(s, "\n%d", i+1);
    if(n>=10)
    {
       fprintf(s, "\n%d", 10);
    }
    rewind(s);
    fscanf(s, "%d\n", &n);
    for(int i = 0; i<n; i++)
    {
       fscanf(s, "%d", &broj);
       printf("%d ", broj);
    }
    fscanf(s, "%d\n", &broj);
    printf("\nNajveci: %d", broj);
    fscanf(s, "%d\n", &broj);
    printf("\nNajmanji: %d", broj);
    if(n>=10)
    {
       fscanf(s, "%d\n", &broj);
       printf("\nAdresa 10:  %d\n", broj);
    }
    fclose(s);
    return 0;
}


 

 

Ne mogu to sad teoretski objašnjavati, pogledaj datoteku, vidi gdje što stoji, pa će ti biti jasno.

 

 

Poruka je uređivana zadnji put ned 3.11.2013 22:58 (Floki).
 
1 0 hvala 0
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Znam da je rekurzija kada funkcija poziva samu sebe, ali zanima me kod ovoga primjera za fibonacciev niz.

 

#include<iostream>

using namespace std;

 

 

int fibonacci (int n)

{

if (n == 0)

return 0;

else if (n == 1)

return 1;

else

return fibonacci(n-1)+fibonacci(n-2);

return 0;

}

int main()

{

int x;

 

cout << "Unesite broj x: " << endl;

cin >> n;

cout << fibonacci(x) << endl;

 

return 0;

}

 

Kada vrtim program sa F10 i F11 vidim da mi se vrijednost n u funkciji za unesenu vrijednost 7 smanjuje sve do 0. Zašto se vrijednost n dekrementira i gdje se smješta vrijednost od return fibonacci(n-1)+fibonacci(n-2), ako se pri svakom pokretanju "petlje" vrijednost n dekrementira?

 

 
0 0 hvala 0
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Xyloto kaže...

Znam da je rekurzija kada funkcija poziva samu sebe, ali zanima me kod ovoga primjera za fibonacciev niz.

Kada vrtim program sa F10 i F11 vidim da mi se vrijednost n u funkciji za unesenu vrijednost 7 smanjuje sve do 0. Zašto se vrijednost n dekrementira i gdje se smješta vrijednost od return fibonacci(n-1)+fibonacci(n-2), ako se pri svakom pokretanju "petlje" vrijednost n dekrementira?

Uf, rekurzija ce ti biti zeznuta za skuziti.

 

Uglavnom ti pozoves funkciju npr. s argumentom 5. Preskoce se ovi if-ovi jer ne vrijede, dolazi se do return naredbe koja zeli vratiti vrijednost, ali ponovno se poziva ista funkciju, ovaj put s argumentima 5-1 i 5-2. Sad je ova prva funkcija nazovimo to, zamrznuta, tj. na stogu je (stacku), a usli smo dublje ({#}) i sad izvrsavamo fibonacci(4) i fibonnaci(3). Postupak se ponavlja dok se ne dode do n = 0 i/ili n = 1. Tad rekurzija staje i vracas se jednu po jednu stepenicu gore, tj. funkcije se skidaju jedna za drugom sa stoga i kako se skidaju, tako vracaju rezultat. Najbolje ces to shvatiti tako da si nacrtas.

 

Evo recimo jednostavniji primjer:

int faktorijel(int n)
{
    if (n > 1) {
        return n * faktorijel(n - 1);
    } else {
        return 1;
    }
}

 

Pozovemo ju recimo s argumentom 3. Prvo se znaci pozove faktorijel(3), provjeri se uvjet, pa se poziva faktorijel(2) i ulazi se razinu dublje, zatim se postupak ponavlja pa se poziva faktorijel(1) i ulazi se u trecu razinu, sad vidimo da uvjet n > 1 vise nije ispunjen i izvrsava se return 1. Funkcija vraca 1 u onu prijasnju, gornju funkciju gdje je n = 2 i sad imamo 2 * 1 = 2, dakle ta funkcija pak vraca 2 onoj iznad nje gdje je n = 3 i onda imamo 3 * 2 =  6 i to je zadnja razina i tu je kraj, rekurzija je vratila 6.


Da smo ju pozvali na primjer s broj = faktorijel(3); sad bi u varijabli broj imali 6. Velim, smotano je za skuziti, pa je najbolje da si crtas.

 

EDIT: Evo nasao sam zgodnu web aplikaciju, ako koga zanima, www.draw.io, pa rekoh da isprobam pa ti odmah i nacrtam tvog Fibonaccija.

Uzeo sam 3 za pocetni n. Sad samo prati skicu, prvo idemo prema dolje, konstruiramo "stablo", a kad dodemo do kraja, vracamo se gore usput vracajuci i vrijednosti funkciji iznad. Dakle, prvo se pozove fib(3). Onda on dode do returna, ali vidimo da se u returnu pozivaju jos dva fib-a, fib(2) i fib(1) (n-1 i n-2). Dakle sadasnja razina ostane takva kakva je i ulazimo u sljedecu razinu. Tu imamo fib(2) i fib(1). fib(1) dolazi do if-a koji je istinit (n = 1) te vraca 1, to je ova strelica s 1. No, rekurzija jos nije zavrsila, pa ajmo vidjeti fib(2). On prolazi sve if-ove i opet dolazi do returna gdje poziva fib(1) i fib(0) (opet n-1 i n-2 gdje je n = 2 u ovom slucaju). fib(1) i fib(0) vracaju 1 i 0 jer su if-ovi ispunjeni. Sad smo u principu dosli do samog kraja rekurzije. fib(1) i fib(0) vratili su fib(2)-u 1 i 0, fib(2) je to zbrojio 1 + 0 = 1 (to je sad onaj dio return funkcija+funkcija, ustvari zbrajaju se povratne vrijednosti tih funkcija i vracaju se funkciji koja ih je pozvala, a to je upravo sama ta funkcija, zato se i zove rekurzija :D) i to je vratio gazdi iznad, fib(3)-u. Ovaj desni fib(1) je takoder vratio 1 i onda je fib(3) zbrojio te dvije jedinice i vratio u glavni program vrijednost 2. F3 zbilja i jest 2. Mozes probati crtati si za vece vrijednosti, dobit ces naravno vece i stablo, ali samo prati kud sto ide i nece biti problema.

 

Doista ne znam jednostavnije od ovoga objasniti.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
Poruka je uređivana zadnji put pon 4.11.2013 11:00 (1domagoj1).
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Xyloto kaže...

Znam da je rekurzija kada funkcija poziva samu sebe, ali zanima me kod ovoga primjera za fibonacciev niz.

...

Kada vrtim program sa F10 i F11 vidim da mi se vrijednost n u funkciji za unesenu vrijednost 7 smanjuje sve do 0. Zašto se vrijednost n dekrementira i gdje se smješta vrijednost od return fibonacci(n-1)+fibonacci(n-2), ako se pri svakom pokretanju "petlje" vrijednost n dekrementira?

 

Svaki poziv fibonacci je neovisan - pri pokretanju ove funkcije stvara se nova lokalna kopija varijable n. Tijekom stepanja debugger ne prikazuje kako se n dekrementira - prikazuje lokalni kontekst nove "instance" funkcije koja (slučajno) ima varijablu koja se isto zove n.

17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Bobobo-bo Bo-bobo kaže...
Xyloto kaže...

Znam da je rekurzija kada funkcija poziva samu sebe, ali zanima me kod ovoga primjera za fibonacciev niz.

...

Kada vrtim program sa F10 i F11 vidim da mi se vrijednost n u funkciji za unesenu vrijednost 7 smanjuje sve do 0. Zašto se vrijednost n dekrementira i gdje se smješta vrijednost od return fibonacci(n-1)+fibonacci(n-2), ako se pri svakom pokretanju "petlje" vrijednost n dekrementira?

 

Svaki poziv fibonacci je neovisan - pri pokretanju ove funkcije stvara se nova lokalna kopija varijable n. Tijekom stepanja debugger ne prikazuje kako se n dekrementira - prikazuje lokalni kontekst nove "instance" funkcije koja (slučajno) ima varijablu koja se isto zove n.

 

Točnije, svaki poziv funkcije daje novu lokalnu varijablu n te funkcije koja je jednaka n-1 lokalnoj varijabli funkcije iz koje je funkcija pozvana. A pozvana funkcija vraća vrijednost u funkciju iz koje je pozvana. Time dolazimo do biti rekurzije, pozivamo funkcije dok god ne dobijemo poznatu vrijednost, kad dobijemo poznatu vrijednost, vraćamo je u funkciju iz koje je funkcija pozvana i tako sve do prvog poziva funkcije.

 

Kud odmah na fibonaccia, postoje dvije grane rekurzije, lakše je to skužiti preko faktorjela.

 

#include <iostream>

int faktorjel(int broj)
{
    if(broj == 1) return 1;
    return broj * faktorjel(broj - 1);
}
int main()
{
    std::cout<< faktorjel(3);
   
    return 0;
}


 

 

Poziv funkcija dok se ne dobije poznata vrijednost

 

1. faktorjel(3)

2. faktorjel(2)

3. faktorjel(1)

 

1. funkcija faktorjel(1) vraća poznatu vrijednost, tu vrijednost vraćamo u faktorjel(2), koja na stogu ima broj 2 koji množimo sa povratnom vrijednošću faktorjel(1)

2. faktorjel(2) vraća u funkciju faktorjel(3) 2 koji množimo sa 3 koji se nalazi na stogu funkcije faktorjel(3)

3. faktorjel(3) vraća u main funkciju 6

 

 

Poruka je uređivana zadnji put pon 4.11.2013 21:10 (Floki).
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Moze li mi neko pomoci oko ova dva zadatka:

 

1. Napisati program koji za dva tri različita cijela broja računa i ispisuje razliku najmanjeg i najvećeg broja. Različitost brojeva provjeriti nakon unosa, te ukoliko nisu različiti ispisati odgovarajuću poruku.

 

2. Napisati program koji će za unešene koordinate za dvije tačke T1(x1,y1) i T2(x2,y2) ispisati koordinate one tačke koja je udaljenija od koordinatnog početka.

Moj PC  
0 2 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Jedino si zaboravio napisati kakvu točno pomoć ti tražiš? Ili tražiš naivca koji je spreman potrošiti svoje vrijeme kako bi tebi napravio rješenje zadataka?

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
11 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
eagle05 kaže...

Moze li mi neko pomoci oko ova dva zadatka:

 

1. Napisati program koji za dva tri različita cijela broja računa i ispisuje razliku najmanjeg i najvećeg broja. Različitost brojeva provjeriti nakon unosa, te ukoliko nisu različiti ispisati odgovarajuću poruku.

 

2. Napisati program koji će za unešene koordinate za dvije tačke T1(x1,y1) i T2(x2,y2) ispisati koordinate one tačke koja je udaljenija od koordinatnog početka.

1. prvo proveris X=Y=Z , ako jeste ispisi poruku

    ako ne onda onda ces imati if ( (X<Y && X<Z && Y>Z) - onda racunas X-Y

    i imac ces jos kombinacija ...

 

2. duzina od koordinatog pocetka ti se izracunava kao sqrt(X2+Y2) gde su X i Y koordinate tacke , pa napravis varijable d1 i d2 npr. u koje smestis duzine od koordinatnog pocekta i posle ih uporedis

 

http://programiranje.org/
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...

Jedino si zaboravio napisati kakvu točno pomoć ti tražiš? Ili tražiš naivca koji je spreman potrošiti svoje vrijeme kako bi tebi napravio rješenje zadataka?

Ne morate pisati program vec da mi obajsnite malo sta se trazi u kojem zadatku:

1. nisam shvatio da li sad unosim 2 ili 3 broja(jer pise za dva tri razlicita..) jer ja znam ako cu odrediti najmanji i najveci broj(ide preko raznih kombinacija u if petljama) i onda opet ne razumijem ovu razlicitost sto treba provjeriti(sta tu zapravo treba uraditi)

2. jesam shvatio sta trebam uraditi, ali ne znam kako izracunati preko koordinata udaljenost tacke(pa ako nije problem recite mi kako se to racuna) i onda dalje ja znam napraviti uslov i ispsiati ostatak

 

edit: kolega @gagiD me je preduhitrio, Hvala ti

Poruka je uređivana zadnji put uto 5.11.2013 19:57 (eagle05).
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

To ti je pitagorin teorem, računaš duljinu hipotenuze, koja predstavlja udaljenost između točaka koordinatnog sustava. Ako je ishodište, tim lakši izračun, kvadriraš koordinate točke i uzmeš kvadratni korjen.

 
0 0 hvala 0
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Jos me samo interesuje za ovaj zadatak sto se unose 3 broja, da li ja oduzimam najmanji od najveceg ili je to nebitno.

Ako je najmanji od najveceg onda koliko sam ja shvatio imam 6 mogucnosti:

1. x-y

2. x-z

3. y-x

4. y-z

5. z-x

6. z-y

Moj PC  
0 0 hvala 0
12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

To ti je pitagorin teorem, računaš duljinu hipotenuze, koja predstavlja udaljenost između točaka koordinatnog sustava. Ako je ishodište, tim lakši izračun, kvadriraš koordinate točke i uzmeš kvadratni korjen.

Sqrt je prilicno skupa operacija spram mnozenja i zbrajanja i potpuno nepotrebna za ovaj slucaj. Lekcija naucena prilikom implementiranja "Nearest neighbour" algoritma :)

17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
CyberK kaže...
Floki kaže...

To ti je pitagorin teorem, računaš duljinu hipotenuze, koja predstavlja udaljenost između točaka koordinatnog sustava. Ako je ishodište, tim lakši izračun, kvadriraš koordinate točke i uzmeš kvadratni korjen.

Sqrt je prilicno skupa operacija spram mnozenja i zbrajanja i potpuno nepotrebna za ovaj slucaj. Lekcija naucena prilikom implementiranja "Nearest neighbour" algoritma :)

Tko kaže da mi treba sqrt za dobiti korjen, to mogu i sa množenjem i zbrajanjem uključujući jedno djeljenje, čak ni pow ne trebam.

Poruka je uređivana zadnji put uto 5.11.2013 21:42 (Floki).
12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

Da, ima par aproksimacija zasnovanih na float reprezentaciji, ali onda se postavlja pitanje zasto koristit opskurne algoritme da bi optimizirao funkciju iz C standard library, kad je jednostavnija optimizacija ne ciniti nista. Jer cak i ako to mozes napravit u 3-4 operacije, ostaje cinjenica da su to ekstra 3-4 nepotrebne operacije, obzirom da u ovom slucaju bez korjenovanja imas 2 mnozenja i jedno zbrajanje.

17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
CyberK kaže...

Da, ima par aproksimacija zasnovanih na float reprezentaciji, ali onda se postavlja pitanje zasto koristit opskurne algoritme da bi optimizirao funkciju iz C standard library, kad je jednostavnija optimizacija ne ciniti nista. Jer cak i ako to mozes napravit u 3-4 operacije, ostaje cinjenica da su to ekstra 3-4 nepotrebne operacije, obzirom da u ovom slucaju bez korjenovanja imas 2 mnozenja i jedno zbrajanje.

Zasnovao sam rješenje na Pitagori, ali ne moram nužno koristiti sqrt, ovaj algoritam ima složenost O(2 * (log d / preciznost)), a mogu ga još ubrzati na log 2 * (log d /preciznost)

#include <iostream>

int main()
{
   double x = 5, y = 4;
   double gornja = 1, donja = 0, sredina, umnozak;
   double d = x * x + y * y;
   if(d > gornja) gornja = d;
   while(gornja - donja > 0.00005)
   {
      sredina = (gornja + donja) / 2;
      umnozak = 1;
      for(int i=0; i< 2; i++)
         umnozak *= sredina;
      if(umnozak > d) gornja = sredina;
      else donja = sredina;
   }
   std::cout<< donja;
   
   
   
   return 0;
}


 

Ne znači nužno da koristim sqrt ako navedem da treba dobiti kvadratni korjen.

 

 

Poruka je uređivana zadnji put uto 5.11.2013 23:04 (Floki).
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...
CyberK kaže...
Floki kaže...

To ti je pitagorin teorem, računaš duljinu hipotenuze, koja predstavlja udaljenost između točaka koordinatnog sustava. Ako je ishodište, tim lakši izračun, kvadriraš koordinate točke i uzmeš kvadratni korjen.

Sqrt je prilicno skupa operacija spram mnozenja i zbrajanja i potpuno nepotrebna za ovaj slucaj. Lekcija naucena prilikom implementiranja "Nearest neighbour" algoritma :)

Tko kaže da mi treba sqrt za dobiti korjen, to mogu i sa množenjem i zbrajanjem uključujući jedno djeljenje, čak ni pow ne trebam.

Za rješenje zadatka uopće ne treba računati korijen - pitanje je koja je točka udaljenija, a ne koliko je daleko od ishodišta. Korijen je monotono rastuća funkcija pa je dovoljno provjeriti što je veće, X12+Y12 ili X22+Y22

11 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Ima li neko naku dobru ideju sta bih mogao radit za maturski? Bilo bi pozeljno da je povezano s matematikom.

http://programiranje.org/
 
0 0 hvala 0
12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Bobobo-bo Bo-bobo kaže...
Floki kaže...
CyberK kaže...
Floki kaže...

To ti je pitagorin teorem, računaš duljinu hipotenuze, koja predstavlja udaljenost između točaka koordinatnog sustava. Ako je ishodište, tim lakši izračun, kvadriraš koordinate točke i uzmeš kvadratni korjen.

Sqrt je prilicno skupa operacija spram mnozenja i zbrajanja i potpuno nepotrebna za ovaj slucaj. Lekcija naucena prilikom implementiranja "Nearest neighbour" algoritma :)

Tko kaže da mi treba sqrt za dobiti korjen, to mogu i sa množenjem i zbrajanjem uključujući jedno djeljenje, čak ni pow ne trebam.

Za rješenje zadatka uopće ne treba računati korijen - pitanje je koja je točka udaljenija, a ne koliko je daleko od ishodišta. Korijen je monotono rastuća funkcija pa je dovoljno provjeriti što je veće, X12+Y12 ili X22+Y22

Upravo sam o tome i govorio. Algoritam je O(1).

Isto se koristi u "Nearest neighbour" algoritmu gdje imamo testnu tocku i prvi je korak naci K najblizih tocki. Tj. sortiramo sve zadane tocke po udaljenosti od testne tocke i uzmemo K najblizih. Ovo je isto kao da ih sortiramo po kvadratu udaljenosti, a obzirom da je potonje puno lakse za izracunat, onda je korjenovanje nepotrebna komplikacija.

I usput Floki, mislim da je Newton-Raphson iterativna metoda koja se obicno koristi dosta brza od ovoga, barem sto se tice postizanja iste preciznosti od ove tvoje iterativne metode.

17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Pa što odmah nisi rekao, napravio sam previd u tome da u zadatku eksplicitno  ne traže udaljenost, nego komparaciju udaljenosti dvije točke, i time sam učinio korak više.

Ne treba tu petljati nikakve algoritme za objasniti to.

 

Ono što je boboo rekao da je korjen monotono rastuća funkcija ja ću reći geometrijski.

Dovoljno je izračunati površinu kvadrata, a veća površina kvadrata daje dulju stranicu kvadrata. Koji god algoritam koristio ovo, samo je primjena Pitagore da računamo površinu kvadrata hipotenuze preko površine kvadrata kateta. Pošto mu nisu tražii duljinu hipotenuze, tim bolje, ni ne treba mu za komparaciju.

 

Ne sortiraš ti tu ništa preko kvadrata udaljenosti, nego preko površine kvadrata nad hipotenuzom, a duljina stranice tog kvadrata izlazi iz površine kvadrata. Trebao si mi odmah reći, ne traže udaljenost, i to je to.

 

 

 

Poruka je uređivana zadnji put sri 6.11.2013 18:11 (Floki).
 
0 1 hvala 0
12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...
Ne sortiraš ti tu ništa preko kvadrata udaljenosti, nego preko površine kvadrata nad hipotenuzom, a duljina stranice tog kvadrata izlazi iz površine kvadrata. Trebao si mi odmah reći, ne traže udaljenost, i to je to.

 

Pa davao sam hintove, ni vi ne dajete odmah ljudima gotova rjesenja, nego da malo promisle :)

I ne mozes reci da ne sortiram preko kvadrata udaljenosti, kad upravo to radim. Da, mozes uvesti geometrijsku interpretaciju, ali ne mozes reci da je jedno, a nije drugo, kad je oboje iskazano istom matematickom formulom. Kao da je kazem da onaj tvoj prvi program ne daje udaljenost, vec korijen povrsine kvadrata nad hipotenuzom.

I ako cemo logicki, u kontekstu "Najblizih susjeda", udaljenost je puno prikladnija interpretacija jer je tako srocen algoritam, ovo je samo optimizacija, jer je kvadrat udaljenosti medjukorak pri izracunavanju udaljenosti koja ti zapravo treba, a kako je zadnji korak monotono rastuca funkcija i racunski najzahtjevniji dio, nije ju potrebno racunat. Tvoja interpretacija ce bit nezgrapna ako uvedemo vise dimenzija (kvadrat povrsine kvadrata nad hipotenuzom trokuta odredjenog s glavnom dijagonalom i katetama koje su dijagonale stranica...), te potpuno pada u vodu kod neeuklidskih metrika koje nisu tako rijetke.

 

Edit: TD nije od mene...

Poruka je uređivana zadnji put sri 6.11.2013 20:10 (CyberK).
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

To je bila samo opservacija za Pitagoru

 

x^2 + y^2 - to je površina dva kvadrata nad katetama, a zbroj je površina kvadrata nad hipotenuzom.

 

Inače, susreo sam se već sa školskim zadatkom gdje je trebalo provjeriti udaljenost 3d točaka, pa je tip koristio kvadrat udaljenosti, a min dozvoljenu udaljenost je kvadrirao, da bi je mogao usporedti sa kvadratom udaljenosti uz objašnjenje da kompjutori više vole množenje od sqrt.

 

Inače, Heron mi se sviđa za sqrt, brz je, a jednostavan.

Poruka je uređivana zadnji put sri 6.11.2013 22:30 (Floki).
 
0 0 hvala 0
11 godina
neaktivan
offline
Dev-C++ nedostatak datoteka

Pozdrav ekipa!

Skinuo sam program sa neta, totalni sam početnik sa programiranjem i sada sam krenuo sa učenjem polako jer sljedeće godine planiram upisati Informaciske tehnologije pa da nisam baš ko tukan, a programiranje me oduvijek zanima. E pa sada tražim po netu datoteke na netu za grafiku ali ih ne mogu nači!

Može li netko pomoć, poslat ili nač gdje ih mogu skinut?

 

Include:corio.h , graphics.h , winbgim.h

Lib: libbgi.a , libconio.a

 

Unaprijed hvala na trudu.

Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Šta u programu označava #ifdef i #endif, koje je njihovo značenje?

 
0 0 hvala 0
16 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Preprocesorska naredba koja provjerava jeli određeni macro definiran. Najbolje ću ti objasniti na primjeru:

 

#define DEBUG

 

main()

{

    #ifdef DEBUG

       cout << "Ovo će se ispisati samo ako je DEBUG macro definiran." << endl;

    #endif

    cout << "Ovo će se svakako ispisati" << endl;

    return 0; 

}

 

Znači ako bi sad izbrisali prvu liniju odnosno ("#define DEBUG") kod unutar ifdef bloka bi kompajler zaobišao, u neku ruku tretirao kao komentar.

 

To možeš koristiti kod debugiranja aplikacija, jednostavan način da upališ i ugasiš debug poruke jednom linijom koda, bez da ih sve ideš mjenjati u komentar ili brisati.

Poruka je uređivana zadnji put čet 7.11.2013 16:06 (LordShgi).
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Instrukcije za preprocesor, najčešće se koriste da se spriječi višestruko includanje headera.

 

Jednostavni primjer, ako imaš

 

#ifdef DEBUG

cout<<"Debagiram 'ko veliki";

#endif

cout<<"kraj";

 

i to kompajliraš dobiti ćeš kao izlaz "kraj"

 

Ako na vrh dodaš #define DEBUG

 

dobiti ćeš "Debagiram 'ko velikikraj"

 

edit: poruka zastarjela zbog izleta do kuhinje između pisanja i slanja haha

 

 

 

Poruka je uređivana zadnji put čet 7.11.2013 16:00 (Dr. Zoidberg).
11 godina
neaktivan
offline
Re: Dev-C++ nedostatak datoteka

Ekipa šta nitko nezna ništa od toga što mitreba gdje nači? Molim Vas pomoć!

E-mail:
Lozinka:
 
vrh stranice