[ svemirski_brod @ 15.10.2012. 20:23 ] @
Hocu da upisem alfabet, a da ne ubacujem jedno po jedno slovo? Da ga nekako unesem automatski, nekom komandom.
[ svemirski_brod @ 15.10.2012. 22:33 ] @
Ovako sam resio:
Code:

#define MAX 100
int main()
{
    int i=0,j;
    char x[MAX];
    for(j=65;j<91;j++) // U ASCII tabeli A=65, Z=90.
    x[i++]=j;             //  J preuzima te vrednosti i dodaje u X[i].
    puts(x);
    return 0;
}

Izbacuje kuke i kvake posle alfabeta, ali za ono sto mi je trebalo radi posao.

Ako neko ima resenje neka javi.


[Ovu poruku je menjao X Files dana 16.10.2012. u 07:08 GMT+1]
[ del-boy @ 16.10.2012. 05:11 ] @
Evo ti isto rešenje, samo sa tačnom dužinom niza i po meni malo lepše napisano (ovo 65 i 91 mi se nikako ne sviđa ;) ).

Code (c):

int main() {
    int i;
    char letters['Z'-'A'+1];
    for (i = 'A'; i <= 'Z'; i++) {
        letters[i-'A'] = i;
    }
    puts(letters);
    return 0;
}
 
[ Mihajlo Cvetanović @ 16.10.2012. 11:05 ] @
Funkcija puts očekuje parametar koji je string ograđen nul karakterom (zero terminated string). Pre pozivanja funkcije puts stavi x[i ]='\0'; i smeće na kraju niza se neće više videti.

[Ovu poruku je menjao X Files dana 16.10.2012. u 13:32 GMT+1]
[ svemirski_brod @ 16.10.2012. 19:10 ] @
Jel mozes da mi razjasnis ovo: ['Z'-'A'+1] i peti red?

Zasto takav izraz kad je ovako jednostavnije?

int main() {
int i,j=0;
char letters[j];
for (i = 'A'; i <= 'Z'; i++) {
letters[j++] = i;
}
puts(letters);
return 0;
}

Da li to nesto znaci ili ne? Hvala
[ svemirski_brod @ 16.10.2012. 19:11 ] @
Hvala :)
[ Mihajlo Cvetanović @ 17.10.2012. 10:33 ] @
Linija char letters[j]; ne bi trebalo da se kompajlira jer vrednost j mora da bude poznata u vreme kompilacije, to jest mora da bude konstanta. Ti si to rešio sa MAX a del-boy je to rešio sa 'Z'-'A'+1. Ista stvar, s tim što del-boyevo rešenje ne uvodi bespotrebno novi podatak, i bolje se iz koda vidi čemu niz služi. Del-boy je takođe uspeo da ukloni promenljivu j, što je okej. Tek u velikim projektima shvatiš da što imaš manje delova (konkretno manje promenljiva) u kodu to je manja verovatnoća da nešto u nekom trenutku (kad menjaš kod) pođe naopako.
[ del-boy @ 17.10.2012. 11:44 ] @
Citat:
svemirski_brod:
Jel mozes da mi razjasnis ovo: ['Z'-'A'+1] i peti red?

Zasto takav izraz kad je ovako jednostavnije?

int main() {
int i,j=0;
char letters[j];
for (i = 'A'; i <= 'Z'; i++) {
letters[j++] = i;
}
puts(letters);
return 0;
}

Da li to nesto znaci ili ne? Hvala


Već je Mihajlo razjasnio neke stvari, ali ipak da odgovorim.

Kad praviš niz moraš mu zadati veličinu. U prvom primeru ti si zakucao veličinu niza na 100 elemenata iako ti ne treba toliko. Bolja alternativa je zauzmeš mesta koliko ti treba. To možeš uraditi tako što ćeš na papiru (ili u glavi) sračunati i napisati broj ili pustiti program da računa. 'Z' - 'A' + 1 daje dovoljno mesta da se smeste velika slova engleskog alfabeta.

Što se petog reda tiče - to je samo način da sračunam lokaciju gde treba upisati slovo bez korišćenja dodatne promenljive, jer realno nije potrebna. Meni lično je ovakav zapis čitljiviji od tvog.

Generalno gledam da izbegavam magične brojeve (veličina niza, ASCII kod slova itd.) ako mogu kod da napišem i da ga razumem bez gledanja u neki spoljnji izvor informacija (u ovom slučaju ASCII tabela). To je jedini razlog zašto sam poslao i drugo rešenje, ništa više ;)