Pozdrav svi forumaši/ce,trebo bi malu pomoc,to jest veliku,imam par zadataka za sutrašnji ispit
Ako smijem pitat šta pohađaš?
Pozdrav svi forumaši/ce,trebo bi malu pomoc,to jest veliku,imam par zadataka za sutrašnji ispit
Ako smijem pitat šta pohađaš?
skinuo sam SDK jednog programa s ove stranice : http://headsoft.com.au/index.php?category=vjoy
stvorio sam projekt u codeblocksu, ubacio sve fajlove, linkao ovaj library (VJoy.lib, nadam se dobro)
i dobivam ovaj error: ld.exe -cannot find -lVJoy.lib error.
Zar ovo while-if ne predstavlja jednu vrstu petlje
Ne, to je zadatak. I ja sam prvo uradio sa petljom, i odgovaraju, "pokusaj bez petlje sad", a ja nemam ideje kako.
Zadatak treba da ima u sebi funkciju int djelilac(int a, int b). :S
U tom slučaju upotrijebi rekurziju i Euklidov algoritam.
Bit Euklidovog algoritma se sastoji u ovom:
Ako je neki k djeljitelj broja a i b tada a = m *k i b = n * k
Iz te relacije lako je vidljivo da a - b = (m - n) * k, ako je a > b, što u stvari znači da je k djeljitelj i razlike a - b, što znači gcd(a, b) = gcd(a-b, b), čime imamo mogućnost da smanjujemo veći do 0,
a manji postaje gcd (najmanji zajednički djeljitelj).
Međutim, ovaj postupak zahtijeva puno iteracija, pogotovo ako je veći broj puno veći od manjeg.
Tu uskače dijeljenje jer vrijedi relacija a = n * b + ostatak, gdje smo u stvari a smanjili za multiplicirani b i očuvali gornju relaciju. Veći smanjujemo do 0, a manji postaje gcd.
Implementacija je jednostavna:
int GCD(int a, int b)
{
if(b == 0) return a;
GCD(b, a%b);
}
Ako pod "shell skripte" mislis na bash, onda mozes u neku od ovih tema staviti pitanje ili napravi novu temu "Programiranje u bash-u - pitanja i odgovori". Nece biti posjecena kao ova, ali moze pomoci.
Bok svima. Početnik sam u programiranju te bih vas zamolio za pomoć u vezi jednog (vama) jednostavnog zadatka.
Zadatak je iz knjige demistificirani C++ (str. 97,98).
Prvo je dan primjer programa u kojem se za unešeni datum određuje da li pada u radne dane ili u dane vikenda.
Prikazan je na slici.
[IMG]http://i44.tinypic.com/2w1ruvp.jpg[/IMG]
Sami zadatak glasi:
Primjer modificirajte tako da dodatno ispitujete da li zadani datum pada na neki blagdan (za početak ispitajte samo za 25.12). Ako pada na blagdan ili ako pada u dane vikenda, ispišite da je taj dan neradni, inače da je radni. Uputa: na početku programa definirajte bool varijablu jeLiPraznik i postavite ju početno na false. Vrijednost te varijable promijenite ako je zadovoljen uvjet ispitivanja za blagdane ili ako se unutar switch-a ispostavi da datum pada u subotu ili nedjelju. Na kraju programa ispitajte vrijednost varijable i ispišite odgovarajuću poruku.
Znam da mi je dana i uputa i sve, ali ipak se ne snalazim.
Kako se ubacuje kod na forum, javljalo mi je neku grešku.
Hvala unaprijed.
Zar ovo while-if ne predstavlja jednu vrstu petlje
Ne, to je zadatak. I ja sam prvo uradio sa petljom, i odgovaraju, "pokusaj bez petlje sad", a ja nemam ideje kako.
Zadatak treba da ima u sebi funkciju int djelilac(int a, int b). :S
U tom slučaju upotrijebi rekurziju i Euklidov algoritam.
Bit Euklidovog algoritma se sastoji u ovom:
Ako je neki k djeljitelj broja a i b tada a = m *k i b = n * k
Iz te relacije lako je vidljivo da a - b = (m - n) * k, ako je a > b, što u stvari znači da je k djeljitelj i razlike a - b, što znači gcd(a, b) = gcd(a-b, b), čime imamo mogućnost da smanjujemo veći do 0,
a manji postaje gcd (najmanji zajednički djeljitelj).
Međutim, ovaj postupak zahtijeva puno iteracija, pogotovo ako je veći broj puno veći od manjeg.
Tu uskače dijeljenje jer vrijedi relacija a = n * b + ostatak, gdje smo u stvari a smanjili za multiplicirani b i očuvali gornju relaciju. Veći smanjujemo do 0, a manji postaje gcd.
Implementacija je jednostavna:
int GCD(int a, int b)
{
if(b == 0) return a;
GCD(b, a%b);
}
Eh ovo je vec odlicno. Hvala ti puno na ovom objasnjenju. Nisam do sad cuo za ovaj Euklidov algoritam. Pokusat cu pomocu njega uraditi, pa cemo vidjeti rezultat.
Ako pod "shell skripte" mislis na bash, onda mozes u neku od ovih tema staviti pitanje ili napravi novu temu "Programiranje u bash-u - pitanja i odgovori". Nece biti posjecena kao ova, ali moze pomoci.
Da, na bash sam mislio. Snasao sam se pomocu nekih knjiga i sada mi se cini vrlo zanimljivo, a narednih semestara cemo se puno baviti bashom, tako da cu napraviti uskoro temu, cisto da postoji na forumu.
Bok svima. Početnik sam u programiranju te bih vas zamolio za pomoć u vezi jednog (vama) jednostavnog zadatka.
Zadatak je iz knjige demistificirani C++ (str. 97,98).
Prvo je dan primjer programa u kojem se za unešeni datum određuje da li pada u radne dane ili u dane vikenda.
Prikazan je na slici.
[IMG]http://i44.tinypic.com/2w1ruvp.jpg[/IMG]
Sami zadatak glasi:
Primjer modificirajte tako da dodatno ispitujete da li zadani datum pada na neki blagdan (za početak ispitajte samo za 25.12). Ako pada na blagdan ili ako pada u dane vikenda, ispišite da je taj dan neradni, inače da je radni. Uputa: na početku programa definirajte bool varijablu jeLiPraznik i postavite ju početno na false. Vrijednost te varijable promijenite ako je zadovoljen uvjet ispitivanja za blagdane ili ako se unutar switch-a ispostavi da datum pada u subotu ili nedjelju. Na kraju programa ispitajte vrijednost varijable i ispišite odgovarajuću poruku.
Znam da mi je dana i uputa i sve, ali ipak se ne snalazim.
Kako se ubacuje kod na forum, javljalo mi je neku grešku.
Hvala unaprijed.
bool jeLiPraznik = false;
if(dan == 25 && mjesec == 12)
jeLiPraznik = true;
else
switch(datum%7)
{
case 1:
case 2:
jeLiPraznik = true;
break;
}
if(jeLiPraznik)
cout<< "Neradni dan << endl;
else
cout<< "Radni dan" << endl;
Ako nas interesira samo to da li je dan radni, postavimo varijablu jeLiPraznik na false, ispitamo je li Božić u if uvjetu, a u switch ulazimo jedino ako nije Božić, a tu isptujemo jedino da li je subota ili nedjelja, ispitivanje drugih dana u switchu nas ne interesira jer smo pošli od pretpostavke da je dan radni, pa ispitujemo samo da li je neradni dan.
Pozdrav imam jedan zadatak koji hitno trebam odraditi.
Korisnik treba da unosi brojeve, a program se treba da zavrsi tek kada korisnik unese neko slovo.
Pozdrav imam jedan zadatak koji hitno trebam odraditi.
Korisnik treba da unosi brojeve, a program se treba da zavrsi tek kada korisnik unese neko slovo.
Koliko si napravio do sad? Gdje si zapeo?
Pozdrav imam jedan zadatak koji hitno trebam odraditi.
Korisnik treba da unosi brojeve, a program se treba da zavrsi tek kada korisnik unese neko slovo.
Koliko si napravio do sad? Gdje si zapeo?
Vidis da covjek hoce sve gotovo. :D
Nampomena program trebam napisat u do while petlji.
Pozdrav imam jedan zadatak koji hitno trebam odraditi.
Korisnik treba da unosi brojeve, a program se treba da zavrsi tek kada korisnik unese neko slovo.
Potrebna ti je jedna do-while petlja koja se izvršava dok korisnik ne unese slovo, to ti je sva logika koju trebaš.
Kolege ovdje ne vole kad neko dođe i naruči program, moraš se malo potruditi lagan je zadatak.
Nampomena program trebam napisat u do while petlji.
Napomena: tema se zove "Programiranje u C++-u - pitanja i odgovori", a ne "Programiranje u C++-u - rjesavanje domacih zadaca".
Mozda te programiranje niti najmanje ne zanima i to je u redu, ali nekakav minimum, neka opca kultura se mora znati, a ovaj zadatak je upravo to.
Nije nitko od tebe trazio da isprogramiras umjetnu inteligenciju za upravljanje space shuttleom.
Znaci, do kud si dosao i sto te tocno muci? Reci, pa cemo ti probati pomoci.
#include <iostream>
using namespace std;
void main()
{
int broj=0;
do
{
cout<<"Unosi brojeve: ";
cin>>broj;
} while (broj>='a' && broj<='z');
}
Ovo je to što sam ja probo, i znam da nije dobro. Nije mi jasno na koji cu nacin postaviti uvjet u do- while petji
Deklarisi varijablu broj tipa char ne integer (int), i nije ti ni uslov dobar, trebalo bi biti da se izvrsava dok korisnik unosi broj<'A' || broj>'z'.
I nemoraš inicijalizovati varijablu pošto koristiš do-while petlju.
Znači ovako bi ti trebalo izgledati:
char broj;
//....
}while(broj<'A' || broj>'z');
Samo te dvije linije izmjeni.
Eto vidis da to nije bilo toliko tesko. Prakticki si sam rijesio zadatak.
E sad, kolega ti je napisao kako bi to trebalo izgledati, no evo ti i objasnjenje. Vjerojatno si cuo za tzv. ASCII tablicu:
To je tablica u kojoj su kodirani ASCII kodovi koji predstavljaju tekst (i neke kontrolne kodove) u racunalima. Znaci kad ti napises slovo A na racunalu, on ga procita kao 01000001 jer racunala znaju govoriti samo binarno. E sad, zasto ne mozes uzeti int broj nego mora biti char broj? Zato sto u int pospremas brojeve, a kad pospremis slovo, mogli bi reci da racunalo ne zna sto bi s tim. S druge strane, ako pospremis char, po ovoj tablici racunalo moze char interpretirati kao broj ili kao slovo (ili kao bilo koji drugi znak - mozes mu recimo upisati kod ovog bell-a koji je u prvom stupcu, pa ce ti interni zvucnik pistati).
Ono sto ti zapravo kazes racunalu u ovom svojem while uvjetu jest da ponavlja tu petlju dok god su kodovi koje spremas u char manji od koda za slovo 'A' i veci od koda za slovo 'z'. Drugim rijecima, ako se pojavi kod koji je izmedu ta dva slova petlja izbacuje. Sad kad pogledas tablicu, vidjet ces da su sva slova izmedu velikog A i malog z. Dok brojevi idu od koda 48 do koda 57.
Evo malo pitanjce, sto bi se dogodilo ako s ovim kodom koji je kolega napisao uneses neki znak umjesto broja. Recimo tocku '.' ili plus '+'. A sto bi se dogodilo ako uneses donju crtu '_' ili uglatu zagradu '['? (hint: pogledaj uvjet i pogledaj tablicu s kodovima)
#include <iostream>
using namespace std;
int nzd(int a, int b) {
while (a!=b){
if (a>b)
a -= b;
else
b -= a;
}
return a;
}
int main () {
int a, b;
cin >> a;
cin >> b;
cout << nzd(a,b);
return 0;
}
Evo, fino rjesenje za onaj moj zadatak: najveci zajednicki djelilac.
#include <iostream>
using namespace std;
int nzd(int a, int b) {
while (a!=b){
if (a>b)
a -= b;
else
b -= a;
}
return a;
}
int main () {
int a, b;
cin >> a;
cin >> b;
cout << nzd(a,b);
return 0;
}
Evo, fino rjesenje za onaj moj zadatak: najveci zajednicki djelilac.
To sam ti i ja napisao ..
#include <iostream>
using namespace std;
int nzd(int a, int b) {
while (a!=b){
if (a>b)
a -= b;
else
b -= a;
}
return a;
}
int main () {
int a, b;
cin >> a;
cin >> b;
cout << nzd(a,b);
return 0;
}
Evo, fino rjesenje za onaj moj zadatak: najveci zajednicki djelilac.
To sam ti i ja napisao ..
Jao, hahahha, izvini molim te, bio sam ubijedjen da je drugi nacin kod tebe bio. Koji sam ja .... :D
Svejedno, to bi i u petlji trebalo napisati preko ostatka cjelobrojnog dijeljenja iz razloga koje sam gore naveo.
Ako je velika razlika između većeg i manjeg broja, kod oduzimanja ima puno iteracija. Kod dijeljenja, odnosno operatora modulo nema više od 5.
A modulo je pogodan i što ne zahtjeva redosljed parametara veći i manji.
ostatak = a %b;
a = b;
b = ostatak;
Progam bi trebao i za unešeni datum koji spada u subotu ili nedjelju ispisati da je Neradni dan. Ovaj kod recimo za sutra 25 5 2013 ispiše da je radni. Ja sam to riješio malom izmjenom u switchu ali mi se sada za unešeni datum koji pada u dane vikenda dva puta ispisuje Neradni dan. Na koji način to riješiti?
Kod je na slici.
Još jednom, kako se umeće kod na forum?
Stavi ovakav switch
switch(datum%7)
{
case 0:
case 1:
jeLiPraznik = true;
break;
}
Stavi ovakav switch
switch(datum%7)
{
case 0:
case 1:
jeLiPraznik = true;
break;
}
Hvala, sada radi.
Još jednom, kako se umeće kod na forum?
Imas kad pises novu poruku gore "Stilovi".
Odaberi "Kod" i pisi.
Shift + Enter je za novi red.
Samo Enter je novi komad koda.
Evo da odgovorim na ovo pitanje koje si mi postavio. Kada bi napisao '.' program bi se nastavio dalje izvrsavati isto tako i sa '+', ali kada bi stavio '_' ili '[' program bi se zavrsio.
Eto vidis da to nije bilo toliko tesko. Prakticki si sam rijesio zadatak.
E sad, kolega ti je napisao kako bi to trebalo izgledati, no evo ti i objasnjenje. Vjerojatno si cuo za tzv. ASCII tablicu:
To je tablica u kojoj su kodirani ASCII kodovi koji predstavljaju tekst (i neke kontrolne kodove) u racunalima. Znaci kad ti napises slovo A na racunalu, on ga procita kao 01000001 jer racunala znaju govoriti samo binarno. E sad, zasto ne mozes uzeti int broj nego mora biti char broj? Zato sto u int pospremas brojeve, a kad pospremis slovo, mogli bi reci da racunalo ne zna sto bi s tim. S druge strane, ako pospremis char, po ovoj tablici racunalo moze char interpretirati kao broj ili kao slovo (ili kao bilo koji drugi znak - mozes mu recimo upisati kod ovog bell-a koji je u prvom stupcu, pa ce ti interni zvucnik pistati).
Ono sto ti zapravo kazes racunalu u ovom svojem while uvjetu jest da ponavlja tu petlju dok god su kodovi koje spremas u char manji od koda za slovo 'A' i veci od koda za slovo 'z'. Drugim rijecima, ako se pojavi kod koji je izmedu ta dva slova petlja izbacuje. Sad kad pogledas tablicu, vidjet ces da su sva slova izmedu velikog A i malog z. Dok brojevi idu od koda 48 do koda 57.
Evo malo pitanjce, sto bi se dogodilo ako s ovim kodom koji je kolega napisao uneses neki znak umjesto broja. Recimo tocku '.' ili plus '+'. A sto bi se dogodilo ako uneses donju crtu '_' ili uglatu zagradu '['? (hint: pogledaj uvjet i pogledaj tablicu s kodovima)
Evo da odgovorim na ovo pitanje koje si mi postavio. Kada bi napisao '.' program bi se nastavio dalje izvrsavati isto tako i sa '+', ali kada bi stavio '_' ili '[' program bi se zavrsio.
Evo da odgovorim na ovo pitanje koje si mi postavio. Kada bi napisao '.' program bi se nastavio dalje izvrsavati isto tako i sa '+', ali kada bi stavio '_' ili '[' program bi se zavrsio.
Upravo to, a znas li objasniti zasto je to tako?
Evo da odgovorim na ovo pitanje koje si mi postavio. Kada bi napisao '.' program bi se nastavio dalje izvrsavati isto tako i sa '+', ali kada bi stavio '_' ili '[' program bi se zavrsio.
Upravo to, a znas li objasniti zasto je to tako?
Zbog toga sto se '.' po ascii tablici nalazi prije slova 'A' isto tako i '+', a '_' i '[' nalaze se između 'A' i 'z'.