Kao što je mbaksa rekao.
Prvo, van for-a deklariši i inicijaliziraj parnih i neparnih, inicijaliziraj in na 0.
Recimo:
parnih++;
Za neparne:
neparnih++;
Kao što je mbaksa rekao.
Prvo, van for-a deklariši i inicijaliziraj parnih i neparnih, inicijaliziraj in na 0.
Recimo:
parnih++;
Za neparne:
neparnih++;
Kao što je mbaksa rekao.
Prvo, van for-a deklariši i inicijaliziraj parnih i neparnih, inicijaliziraj in na 0.
Recimo:
parnih++;
Za neparne:
neparnih++;
Neparni joj ne trebaju. A i ako bi joj trebali, nema smisla da uvodi novu varijablu, pošto je broj neparnih = ukupno - parnih.
sto bi u konacnici izgledalo ovako, jel?
#include<iostream>
using namespace std;
int main()
{
int x, broj, brojac=0;
cout<<"unesite jedan broj";
cin>>x;
for(int i=1; i<=x; i++)
{
cout<<"unesite jos toliko brojeva";
cin>>broj;
if (broj%2==0)
brojac++;
}
cout<<"parnih je"<<brojac<<endl;
system("pause");
return 0;
}
meni je brojac stalno vrtio izvan for petlje..zato mi je krivo islo...:/
hvalaa puno na pomoci :)
Evo slučajno se učlanio na Z-trening pa probam jedan zadatak:
N different points with integer coordinates are given in a plane. You are to write a program that finds the maximum number of collinear points (they all belong to the same line).
INPUT:
The first line of standard input gives a number N (1 <= N <= 600). In each of the next N lines there will be two integers X and Y (-32000 <= X,Y <= 32000) that will represent the coordinates of the given points.
OUTPUT:
To the standard output, output only one integer that yields the maximum number of points given in the input that are collinear.
Input:
4
1 1
2 2
2 1
3 1
Output:
3
Moje rješenje:
#include <iostream>
using namespace std;
void Najcesci(int* p, int n, int* koliko){
int i;
*koliko = p[0];
for(i = 1; i < n; i++)
if(p[i] > *koliko)
*koliko = p[i];
}
int main()
{
int n, pomX, pomY, X, Y;
int brX[64000] = {0}, brY[64000] = {0};
cin >> n;
for(int i = 0; i < n; i++){
cin >> pomX >> pomY;
brX[(pomX < 0) ? (-pomX+32000) : pomX]++;
brY[(pomY < 0) ? (-pomY+32000) : pomY]++;
}
Najcesci(&brX[0], 64000, &X);
Najcesci(&brY[0], 64000, &Y);
if(X > Y)
cout << X;
else
cout << Y;
return 0;
}
..i na testnim podacima dobivam prolaznost 4/10 . Netko vidi problem?
koliko sam skužio, ovaj kod računa najčešću koordinatu na x ili y osi
za input
4
0 0
1 1
2 2
3 3
neće dati rezultat da se sve četiri točke nalaze na pravcu, nego će dati output 1 jer se sve koordinate točaka razlikuju
OT
kad su ženskice u pitanju, i bez indenta kod prolazi
(šala mala, i ja držim da je bitnije da je brzo skužila gdje treba biti brojač od indenta, formi se bude naučila lako)
OT
kad su ženskice u pitanju, i bez indenta kod prolazi
(šala mala, i ja držim da je bitnije da je brzo skužila gdje treba biti brojač od indenta, formi se bude naučila lako)
Da je kôd pravilno indentirala, ne bi ni morala ništa pitati na forumu jer bi vidjela da se brojač nalazi na krivom mjestu. U tome i je cijela poanta. Ljudi su nemarni i ne indentiraju kôd i ne stavljaju red razmaka prije i poslije petlji i time si stvore probleme koje u prvom redu ni ne bi imali da su pravilno indentirali kôd.
OT
kad su ženskice u pitanju, i bez indenta kod prolazi
(šala mala, i ja držim da je bitnije da je brzo skužila gdje treba biti brojač od indenta, formi se bude naučila lako)
Da je kôd pravilno indentirala, ne bi ni morala ništa pitati na forumu jer bi vidjela da se brojač nalazi na krivom mjestu. U tome i je cijela poanta. Ljudi su nemarni i ne indentiraju kôd i ne stavljaju red razmaka prije i poslije petlji i time si stvore probleme koje u prvom redu ni ne bi imali da su pravilno indentirali kôd.
točno tako, to nek joj bude pouka za dalje
kod koda vrijedi načelo preglednosti i jednostavnosti
sve ono što nema te dvije osobine, po defaultu je sumnjivo.
Ovaj citat iz knjige C# 4 nije loše zapamtiti:
"As is so often the case in life, making something look easy takes years of practice and
hard work. It can also be a thankless task: if you devise a contract that is a model of
clarity, people will probably think it was easy to design. Conversely, unnecessary complexity
is often mistaken for cleverness."
nova sam u programiranju, nije me bilo na zadnjim predavanjima pa sada sama ucim neke stvari....trebala mi je ideja da uopce ukljucim taj brojac....tako da ste mi puno pomogli, bez obzira na moj stil pisanja koda...:)
hvala jos jednom ;)
nova sam u programiranju, nije me bilo na zadnjim predavanjima pa sada sama ucim neke stvari....trebala mi je ideja da uopce ukljucim taj brojac....tako da ste mi puno pomogli, bez obzira na moj stil pisanja koda...:)
hvala jos jednom ;)
Ako ćeš još kad stavljati kôd na forum, prvo ga pasteaj u http://jsbeautifier.org/ da ti ga "uljepša", tj. da ti ispravno indentira kôd - kad nekoliko puta to napraviš, počet će ti automatski dolaziti kako se indentira kôd (ako ti nije dovoljno već i to što ti editor sam indentira kôd ).
definitivno cu ga koristiti od sada..hvala :)
Evo, na ovo sam mislio kad sam rekao da se pomoću površine trokuta računa kolinearnost točaka.
(preko nagiba dviju točaka je jednostavije, ali je problem dijeljenje sa nulom).
Logika programa je: ako je površina trokuta date tri točke 0, one su na pravcu, preko prolaza kroz petlje se broji koliko točaka je na pravcu uz date dvije koje određuju pravac.
#include <iostream>
using namespace std;
int main()
{
int brojac, brojKolinearnih = 0, pomocna = 0, brojTocaka;
double povrsina;
cin>> brojTocaka;
int *tockeX = new int[brojTocaka];
int *tockeY = new int[brojTocaka];
for(int i = 0; i < brojTocaka; i++)
{
cin>> tockeX[i] >> tockeY[i];
}
for (int i = 0; i < brojTocaka - 2; i++)
{
for (int j = i + 1; j < brojTocaka - 1; j++)
{
brojac = 0;
for (int k = j + 1; k < brojTocaka; k++)
{
povrsina = 0.5 * ((tockeX[i] * (tockeY[j] - tockeY[k])) + (tockeX[j] * (tockeY[k] - tockeY[i])) +
(tockeX[k] * (tockeY[i] - tockeY[j])));
if (povrsina == 0)
{
brojac++;
}
}
if (brojac > pomocna)
{
pomocna = brojac;
}
}
if (pomocna > brojKolinearnih)
{
brojKolinearnih = pomocna;
}
}
brojKolinearnih = 3 + (brojKolinearnih - 1);
cout<< "Maksimalan broj kolinearnih tocaka: " << brojKolinearnih << endl;
delete [] tockeX;
delete [] tockeY;
return 0;
}
možda bi se moglo nešto i sa nagibom (slope)
m = (y2 - y1) / (x2 - x1)
ali problem je dijeljenja sa 0 - pa bi se moralo sa pažnjom implementirati,
ne znam kako je sa pretvaranjem u polarni sustav - čini mi se da i tamo ima zamka djeljenja sa 0
ovo sa površinom mi se čini najjednostavnije.
A kakvi su to "kosi" pravci? NHF, nasmijalo me :D
EDIT: @Floki - U tom slucaju nagib pravca je pi/2 ili ti 90°.
A kakvi su to "kosi" pravci? NHF, nasmijalo me :D
Ma mislim na one koji nisu tipa
x = c i y = c; c - konstanta
Ma mislim na one koji nisu tipa
x = c i y = c; c - konstanta
To su trivijalni slucajevi pravaca :D
Opci oblik je y = kx + l.
Znam. I ja sam položio matematičku analizu , ali su me testni podaci naveli na krivo razmišljanje.
A kakvi su to "kosi" pravci? NHF, nasmijalo me :D
EDIT: @Floki - U tom slucaju nagib pravca je pi/2 ili ti 90°.
uzmi dvije točke
a(5,3)
b(5.0)
ili nagib pi/2
kad računaš nagib po formuli - dobiješ dijeljenje sa 0
preko računa površine trokuta, sve to otpada jer nigdje nemaš djeljenje, istina , preko površine trokuta testiraš tri točke odjednom
matematički je to u redu, pošto ionako ne testiraš kolinearnost dviju, nego tri točke, dvije točke su matematički uvijek kolinearne.
uzmi dvije točke
a(5,3)
b(5.0)
ili paralelu sa osi y
kad računaš nagib po formuli - dobiješ dijeljenje sa 0
Pa upravo to sam ti i rekao xD. Izraz (y1 - y0)/(x1 - x0) ti je zapravo koeficijent smjera pravca. Kad dode do dijeljenja s nulom, to znaci da je pravac pod nagibom pi/2, zato sto je rezultat od tangens(pi/2) beskonacno, a beskonacno kao rezultat se moze interpretirati kad dode do dijeljenja s nulom. Dakle, treba ti samo jos jedan uvjet koji provjerava da li je nazivnik =0.
uzmi dvije točke
a(5,3)
b(5.0)
ili paralelu sa osi y
kad računaš nagib po formuli - dobiješ dijeljenje sa 0
Pa upravo to sam ti i rekao xD. Izraz (y1 - y0)/(x1 - x0) ti je zapravo koeficijent smjera pravca. Kad dode do dijeljenja s nulom, to znaci da je pravac pod nagibom pi/2, zato sto je rezultat od tangens(pi/2) beskonacno, a beskonacno kao rezultat se moze interpretirati kad dode do dijeljenja s nulom. Dakle, treba ti samo jos jedan uvjet koji provjerava da li je nazivnik =0.
a što kad imaš ove dvije situacije:
a(1,1)
b(1,0)
a(2,2)
b(2,0)
kroz račun dobiješ isti nagib 0, a pravci različiti
dakle, još if uvjeta
to je fino računati za 2 točke - a kad ti složi da program treba izračunati za 100 točaka, gdje možeš imati paralelne i okomite sa x koji ne moraju biti isti,
dakle, ništa bez dva generalna if uvjeta - koje onda moraš granati po koordinatama, a to usložnjava stvari.
razlika između matematičara i programera, matematičar bi sigurno srušio na ispitu nekoga tko bi preko površine trokuta računao kolinearnost točaka u pravokutnom sustavu,
uz sve dužno poštovanje prema kraljici znanosti, jer je sve to njezina aparatura.
Imam pitanje:
int i;
for (i=0; i<=9; i++)
cout << i << endl;
Ispis programa:
0
1
2
3
4
5
6
7
8
9
E sad meni nije jasno zasto to ispisuje ako sam samo napravio varijablu, u petlji joj dao vrijednos 0, provijerio ako je <=9 i povečao ju (i++), na kraju zadao da se ispise i
to samo jednom, a ona(varijabla) se ispise 10 puta i to uvijek sa drugom vrijednošć/ču.
Zašto?
Trolaš il se šališ?
Trolaš il se šališ?
Neznam,pitam.
Evo uzmi tvoj primjer:
i=0, uslov je da je i manje ili jednako 9.
i=0, manje je od devet, ispisati će se i, tj. 0, i će se povećati za 1.
i=1, manje je od devet, ispisati će se i, tj. 1, i će se povećati za 1.
...
i=9, jednako je devet, ispisat će se i, tj. 9, i će se povećati za 1.
i=10, nije manje niti jednako od 9, izlazi se iz petlje.
Prvo pitaj Google, sve što ti mogu reći je, sretno ti sa takvim načinom učenja, nećeš daleko stići pilanjem po forumu.
Ne možeš pri prvom preoblemu ići na forum i pitati, malo se namuči, tako razvijaš logiku.
Moraš PAŽLJIVO čitati knjigu, detaljno, svaki primjer analizirati, a ne pitati ovakve stvari, pročitaj još jednom o for petlji.
Probaj mjenjati argumente for petlje, vidi što će se analogno tome mjenjati, malo mućkaj!, i nemoj pjeniti, stvarno sam mislio da se šališ.
koga vraga si iso radit petlju ako nezelis da ti se ista ponavlja, isto tako si mogao napravit:
int i=0;
if (i<=0){
cout<<i<<endl;
}
to samo jednom, a ona(varijabla) se ispise 10 puta i to uvijek sa drugom vrijednošć/ču.
Zašto?
Zašto napamet radiš? Zašto nisi pogledao kako si piše naredba for? I što znači koji dio te naredbe?
I još jedna stvar - naredba završava znakom ; - dakle, "točkom-zarez". To što si ti cout gurnuo u novi red u C++-u ne igra apsolutno nikakvu ulogu - sve do točke-zarez je dio naredbe for.
imam par problema:
1. neznam kada upotrijebiti "=" a kada "==", znam teoriju, i koji sta znaci ali neznam koji kada trebam primjeniti....
2. neznam kada koristiti {}, mislio sam da su mi potrebne samo jedne, ali pišući program sam trebao staviti kod samo jedne (!?) case naredbe..... sad ih koristim svugdje: if, while, for, switch....
imam par problema:
1. neznam kada upotrijebiti "=" a kada "==", znam teoriju, i koji sta znaci ali neznam koji kada trebam primjeniti....
2. neznam kada koristiti {}, mislio sam da su mi potrebne samo jedne, ali pišući program sam trebao staviti kod samo jedne (!?) case naredbe..... sad ih koristim svugdje: if, while, for, switch....
Ne znaš ti ništa. Napiši što piše za =, a što za ==. Zar nema primjera?
Vitičaste zagrade služe za stvaranje bloka naredbi. Znači, ako imaš naredbu if:
if (uvjet) naredba;
Ako umjesto "naredba" želiš napisati više naredbi, onda ćeš ih vitičastim zagradama zatvoriti u blok naredbi.
što su ponovno mijenjali gramatiku, primjećujem da ih sve više piše "neznam" i slične stvari