[C] brojač u C-u
Moderator/ica: Moderatori/ce
Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
- cybervd
- Postovi: 81
- Pridružen/a: 29 tra 2008, 21:41
- Spol: M
- OS: Point Linux MATE 2,2 64b
- Lokacija: Kutina
- Kontakt:
[C] brojač u C-u
Kako da napravim dva brojača u C-u. Jedan bi trebao brojati neparne brojeve, a drugi parne? Svaki neparni broj trebalo bi pomnožiti sa 1, dok parne sa 2.Raspon brojeva za neparne je do 9, a za parne 8. Znam da je to jednostavno
, ali sam se sav spetljao i upravo zato što je to jednostavno, već sam sav divlji
.
- nicky
- Site Admin
- Postovi: 2074
- Pridružen/a: 07 pro 2007, 16:30
- Spol: Ž
- OS: ubuntu 12.04
- Lokacija: Zagreb
Re: brojač u C-u
i = 1;
j = 2;
i +=2;
j+=2;
if(i == 9)
i = 1;
if(j == 8)
j = 2;
to je najjednostavnije, ili
i = 1;
nekakva petlja()
i++;
parni = i * 2;
neparni = i * 2 - 1;
to mi ovak na brzinu pada na pamet
j = 2;
i +=2;
j+=2;
if(i == 9)
i = 1;
if(j == 8)
j = 2;
to je najjednostavnije, ili
i = 1;
nekakva petlja()
i++;
parni = i * 2;
neparni = i * 2 - 1;
to mi ovak na brzinu pada na pamet
- 4ndY
- Moderator
- Postovi: 4060
- Pridružen/a: 15 svi 2008, 18:05
- Spol: M
- OS: Fedora/KDE
- Lokacija: Hamburg, DE
- Kontakt:
Re: brojač u C-u
Nije mi jasno kakav je smisao množiti brojeve s 1? Imaš li puni tekst zadatka?
btw cybervd, prije nego kreneš pisati program mora ti biti jasan sam problem - to je prvo pravilo programiranja: "Nikad ne smiješ početi kodirati ako ti u glavi problem nije jasan i nemaš ideju rješenja".
btw cybervd, prije nego kreneš pisati program mora ti biti jasan sam problem - to je prvo pravilo programiranja: "Nikad ne smiješ početi kodirati ako ti u glavi problem nije jasan i nemaš ideju rješenja".
A neutron walks into a bar; he asks the bartender, 'How much for a beer?' The bartender looks at him, and says 'For you, no charge.'
- cybervd
- Postovi: 81
- Pridružen/a: 29 tra 2008, 21:41
- Spol: M
- OS: Point Linux MATE 2,2 64b
- Lokacija: Kutina
- Kontakt:
Re: brojač u C-u
Pa, radi se o tome da treba izračunati JMBG tj. zadnju znamenku. Ovako ide zadatak:
Napišite funkciju koja na kraj stringa čiji su elementi znamenke dodaje kontrolnu znamenku. Kontrolna znamenka računa se sljedećim algoritmom:
1) Znamenke u stringu sumiraju se težinski tako da znamenke koje se nalaze na parnom mjestu gledano s lijeva množimo s 2, a one na neparnom s 1.
2) Kontrolna znamenka jednaka je ostatku pri dijeljenju sume iz 1) s 10.
3) Kontrolnu znamenku dodajemo na kraj stringa (Pretpostavka je da je ulazni niz karaktera dovoljno velik da se može dodati kontrolna znamenka bez realociranja)
Primjer:
input: "14579"
sum = 1 + 2 * 4 + 5 +7 * 2 + 9 = 1 +8 +5 +14 + 9 = 37
kz = 37 mod 10 = 7
rezultat = 145797
Davim se ovim već pola dana i nikako da ga napravim bez greške. Probao sa for petljom tipa
for(a=1, a<9, a=a+2){
a = a * 1;
}
for (a=2, a<8, a=a+2){
a = a * 2 ;
}
Pa, sa if petljom
if(a==1)||(a==3)||(a==5)||(a==7)||(a==9){
a=a*1;
}
if(a==2)||if(a==4)||(a==6)||(a==8){
a = a * 2 ;
Da li znate ovo riješiti? Inače ovo je bio zadatak za testiranje kandidata za radno mjesto programer - pripravnik.
Napišite funkciju koja na kraj stringa čiji su elementi znamenke dodaje kontrolnu znamenku. Kontrolna znamenka računa se sljedećim algoritmom:
1) Znamenke u stringu sumiraju se težinski tako da znamenke koje se nalaze na parnom mjestu gledano s lijeva množimo s 2, a one na neparnom s 1.
2) Kontrolna znamenka jednaka je ostatku pri dijeljenju sume iz 1) s 10.
3) Kontrolnu znamenku dodajemo na kraj stringa (Pretpostavka je da je ulazni niz karaktera dovoljno velik da se može dodati kontrolna znamenka bez realociranja)
Primjer:
input: "14579"
sum = 1 + 2 * 4 + 5 +7 * 2 + 9 = 1 +8 +5 +14 + 9 = 37
kz = 37 mod 10 = 7
rezultat = 145797
Davim se ovim već pola dana i nikako da ga napravim bez greške. Probao sa for petljom tipa
for(a=1, a<9, a=a+2){
a = a * 1;
}
for (a=2, a<8, a=a+2){
a = a * 2 ;
}
Pa, sa if petljom
if(a==1)||(a==3)||(a==5)||(a==7)||(a==9){
a=a*1;
}
if(a==2)||if(a==4)||(a==6)||(a==8){
a = a * 2 ;
Da li znate ovo riješiti? Inače ovo je bio zadatak za testiranje kandidata za radno mjesto programer - pripravnik.
- 4ndY
- Moderator
- Postovi: 4060
- Pridružen/a: 15 svi 2008, 18:05
- Spol: M
- OS: Fedora/KDE
- Lokacija: Hamburg, DE
- Kontakt:
Re: brojač u C-u
Evo rješenje, a ti za uzvrat dobro prouči kako radi i počni čitati recimo ovu skriptu (C).
Kod: Označi sve
#include <stdio.h>
int main( void ){
char input[15];
int znamenka, i = 0, kontrolna = 0;
scanf("%s", input);
//suma za kontrolnu
while( input[i] != '\0' ){
znamenka = input[i] - '0';
kontrolna += ( i % 2 ) ? ( znamenka * 2 ) : ( znamenka );
i++;
}
input[i] = (kontrolna % 10) + '0';
input[++i] = '\0';
printf("%s\n", input);
return 0;
}A neutron walks into a bar; he asks the bartender, 'How much for a beer?' The bartender looks at him, and says 'For you, no charge.'
- cybervd
- Postovi: 81
- Pridružen/a: 29 tra 2008, 21:41
- Spol: M
- OS: Point Linux MATE 2,2 64b
- Lokacija: Kutina
- Kontakt:
Re: brojač u C-u
Hvala, 4ndY! Cool skripta, kužim neke stvari, ali kaj znači '\0' ? Trenutno sam na win xp-u, pa koristim Dev-C++ i Notepad++ . Uskoro bi trebao izaći Novi Ubuntu 9.04, pa ću se prebaciti na linux. Pročitao sam nekoliko prvih stranica i piše da se kompajlira u linuxu/unixu tako da se u terminalu napiše cc. Da li se isto tako kompajlira kod Ubuntu-a? Dugo se nisam bavio sa C-om još od 2001. / 2002. , tad sam nešto radio u C-u na faksu (TVZ), ali to ti je bilo tek toliko da se spomene. Prije toga nikada nisam ništa ozbiljnije programirao, nešto malo u BASIc-u u srednjoj i to je to.
- cybervd
- Postovi: 81
- Pridružen/a: 29 tra 2008, 21:41
- Spol: M
- OS: Point Linux MATE 2,2 64b
- Lokacija: Kutina
- Kontakt:
Re: brojač u C-u
I prije sam bio na linuxu, da ne bi mislio da tek počinjem sa linuxom
. Uglavnom Ubuntu. Još jednom ti hvala na pomoći

- 4ndY
- Moderator
- Postovi: 4060
- Pridružen/a: 15 svi 2008, 18:05
- Spol: M
- OS: Fedora/KDE
- Lokacija: Hamburg, DE
- Kontakt:
Re: brojač u C-u
cc ili gcc je GNU kompajler za C/C++, samo upišeš ovo
da bi kompajlirao iz konzole.
'\0' (null) je oznaka za kraj stringa u memoriji. Znači string se ispisuje sve dok ne naiđe na '\0' znak. Ukoliko ne bi bilo toga znaka string bi se mogao "proširiti" i na daljnju memoriju... bez obzira na koliko smo ga znakova u startu ograničili.
Kod: Označi sve
gcc ime_fajla.c -o izvrsna.exe'\0' (null) je oznaka za kraj stringa u memoriji. Znači string se ispisuje sve dok ne naiđe na '\0' znak. Ukoliko ne bi bilo toga znaka string bi se mogao "proširiti" i na daljnju memoriju... bez obzira na koliko smo ga znakova u startu ograničili.
A neutron walks into a bar; he asks the bartender, 'How much for a beer?' The bartender looks at him, and says 'For you, no charge.'
- nicky
- Site Admin
- Postovi: 2074
- Pridružen/a: 07 pro 2007, 16:30
- Spol: Ž
- OS: ubuntu 12.04
- Lokacija: Zagreb
Re: brojač u C-u
4ndY je napisao/la:
'\0' (null) je oznaka za kraj stringa u memoriji. Znači string se ispisuje sve dok ne naiđe na '\0' znak. Ukoliko ne bi bilo toga znaka string bi se mogao "proširiti" i na daljnju memoriju... bez obzira na koliko smo ga znakova u startu ograničili.
Ovakvu sintaksu obavezno izbjegavat!!!!!
To se piše ovako:
while(string != 0) ili while(string != NULL)
'\0' - to ti znači uzmi ascii nulu (ona nula 48 iz ascii tablice) pa sa \ joj uključi posebno značenje.
Na kraju svakog stringa stoji prava nula baš kao broj pa se to tako i piše.
- 4ndY
- Moderator
- Postovi: 4060
- Pridružen/a: 15 svi 2008, 18:05
- Spol: M
- OS: Fedora/KDE
- Lokacija: Hamburg, DE
- Kontakt:
Re: brojač u C-u
Možeš navest neku referencu za ovo? Primjeti da se ovdje ne radi o C++/C# i klasi string (tamo to ne vrijedi, jer se string drugačije definira, ne kao null terminator), već čistom C-u, a kod njega je ovo sasvim legalno, dapače standard (ili griješim?)nicky je napisao/la: Ovakvu sintaksu obavezno izbjegavat!!!!!
Analogijom - da li itko koristi umjesto '\n' (newline) ASCII kod (char)10?
EDIT: malo sam guglao i ne mogu nigdje naći zašto bi se '\0' trebalo izbjegavati, štoviše u samom ANSI C standardu se koristi baš ta sintaksa
A neutron walks into a bar; he asks the bartender, 'How much for a beer?' The bartender looks at him, and says 'For you, no charge.'