[C] brojač u C-u

C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Avatar
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

Post Postao/la cybervd »

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 :oops: , ali sam se sav spetljao i upravo zato što je to jednostavno, već sam sav divlji :evil: .
Avatar
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

Post Postao/la nicky »

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
Avatar
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

Post Postao/la 4ndY »

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".
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.'
Avatar
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

Post Postao/la cybervd »

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.
Avatar
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

Post Postao/la 4ndY »

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.'
Avatar
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

Post Postao/la cybervd »

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.
Avatar
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

Post Postao/la cybervd »

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 ;) :D
Avatar
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

Post Postao/la 4ndY »

cc ili gcc je GNU kompajler za C/C++, samo upišeš ovo

Kod: Označi sve

gcc ime_fajla.c -o izvrsna.exe
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.
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.'
Avatar
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

Post Postao/la nicky »

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.
Avatar
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

Post Postao/la 4ndY »

nicky je napisao/la: Ovakvu sintaksu obavezno izbjegavat!!!!!
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?)

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.'
Odgovori