Programiranje u C-u - od svega pomalo izdvojena tema

poruka: 1.661
|
čitano: 351.096
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
odjavljen
offline
Re: Pomoć u C-u

Prvo inicijaliziraš random generator (ovo radiš samo jednom)

srand( time(NULL) );

 

rand() ti vrača nasumični broj, a da bi imao broj 0 - 6 (7 oblika) radiš modulo:

oblik_ind = rand() % 7;

Big wheel keep on turning, Proud Mary keep on burning, Trolling, trolling, trolling on the river.
14 godina
protjeran
offline
Re: Pomoć u C-u
MrBlc kaže...

Prvo inicijaliziraš random generator (ovo radiš samo jednom)

srand( time(NULL) );

 

rand() ti vrača nasumični broj, a da bi imao broj 0 - 6 (7 oblika) radiš modulo:

oblik_ind = rand() % 7;

Primjer molim.

Ja sam toliko zakon da mi potpis opće ne treba. I ako komentirate moj potpis (kojeg nemam) bacit ću nuklearku na Vas bez da je aktiviram!
16 godina
odjavljen
offline
Re: Pomoć u C-u

Imaš varijablu:

 

int oblik_ind; // ova varijabla predstavlja index oblika sljedećeg elementa

 

srand( time(NULL) ); // ovo pozoveš prije prvog korištenja rand() funkcije


oblik_ind = rand() % 7; //pomoću rand() funkcije dobiješ nasumičan broj, uzimaš ostatak dijeljenja sa 7 i spremaš u oblik_ind

 

dalje samo za svaki novi element ponovno pozivaš:

oblik_ind = rand() % 7;

Big wheel keep on turning, Proud Mary keep on burning, Trolling, trolling, trolling on the river.
14 godina
protjeran
offline
Pomoć u C-u

Pozdrav!

Ako skužite što je problem recite.

http://pastie.org/private/yppxqlgjk4r81n5lc71da

http://pastie.org/1560082

Hvala!

Ja sam toliko zakon da mi potpis opće ne treba. I ako komentirate moj potpis (kojeg nemam) bacit ću nuklearku na Vas bez da je aktiviram!
Poruka je uređivana zadnji put ned 13.2.2011 20:04 (beno101).
Moj PC  
0 0 hvala 1
16 godina
odjavljen
offline
Re: Pomoć u C-u

Prvo, govoriš o tome da želiš programirati u C-u, a ovo je c++. Drugo, ako imaš više od jedne naredbe koja se izvršava ako je zadovoljen uvjet, one idu u vitičaste zagrade. Treće, ako ćeš stvarno pisati u C++ onda bi si mogao prilično olakšati stvar objektnim pristupom. Trenutno skidam Visual Studio C++, a ti si u međuvremenu barem mogao napisati što ti se dogodi kad pokreneš program ili koje greške izbaci kad kompajliraš.

 

Edit:

za liniju: char (*lik)[sirinaLika] = (char (*)[sirinaLika])aktivniLik; mi javlja error prilikom kompajliranja jer bi dimezije polja trebale biti poznate prilikom kompajliranja ili bi polje trebao dinamički alocirati. S obzirm da su svi elementi "jednakih dimenzija", onda možeš koristiti konstantu za dimenzije lika (nače je u tetrisu 4x4, a ne 3x3 - | ti je jednu kockicu kratak). Uz to, moraš znati za svaki element gdje mu je točka najbliža lijevoj, desnoj i donjoj stranici (u odnosu na gornji lijevi kut lika) kako bi mogao ispravno testirati da li je elemenat pao ili došao u krajnji lijevi ili desni položaj. Ako je došao, ne resetiraš mu položaj, već u tom smjeru više ne smije ići, odnosno, ako je pao dolje, ide sljedeći element. Da bi stari element zapamtio, moraš imati i spremanje svih elemenata koji su do sad pali (ali to je drugi korak).

Bilo bi dobro kad bi elemente spremao u nekakvu strukturu preko koje možeš pristupiti prethodnoj i sljedećoj rotaciji tog elementa.   To može biti 3D polje u kojem su u jednu dimenziju spremljene sve rotacije jednog lika u obliku kako ih sad spremaš u posebne varijable - ako ima 2 rotacije, spremaš 1,2,1,2 a za jednu rotaciju 1,1,1,1 kako bi imao za sve likove 4 rotacije jer nećeš morati testirati koji je lik i koliko ima rotacije kad ga budeš rotirao.

 

U skladu s objektnim programiranjem bi bilo napraviti interface Lik kojeg bi svi likovi implementirali, a imao bi metodu za rotaciju ulijevo, udesno, pad za jedno polje, pomak ulijevo, udesno i za dohvat podataka za prikaz. Svaki element bi sam za sebe vodio računa o tome da li je došao do lijevog zida, do desnog zida , do poda ili do drugih elemenata, a provjeru bi vršio s objektom klase Prostor. Ukoliko bi detektirao da više ne može padati, javio bi tom objektu da je završio.

Objekt klase prostor bi pohranjivao mapu palih likova, imao bi metodu za provjeru da li je polje zauzeto, te metodu kojoj bi objekt koji implementira interface Lik javio da je završio padati. Ta metoda bi izvela provjeru da li je ijedan red popunjen, ako je popunjen, izbrisala bi ga, a sve elemente iznad njega spustila za jedno mjesto, te kad završi provjeru svih redaka triggala kreiranje novog Lik-a.

Big wheel keep on turning, Proud Mary keep on burning, Trolling, trolling, trolling on the river.
Poruka je uređivana zadnji put ned 13.2.2011 22:23 (MrBlc).
14 godina
offline
Pomoć u C-u

pozdrav..malo pomalo ucim programiranje u C-u uz pomoc knjige koja se koristi u matematickoj u lucijanki iz informatike...ima li itko da mi pogleda program i ako ima gresaka da ih ispravi (nemogu skinut program jer imam malo MB jos)...zahvaljujem unaprijed

 

#include <stdio.h>
void main()
{
 float s,t,v;
int b;
printf("Izaberite što želite izračunati");
printf("\n 1:brzina \n 2:put \n 3:vrijeme \n  4:akceleracija_vt \n 5:akceleracija_fm \n 6:sila \n 7:masa\n");
printf("Izbor: ")
scanf("%d", &b);
switch (b)
{
case 1: printf("Unesi duljinu puta u metrima: ");
        scanf("%f", &s);

        printf("Unesi vrijeme u sekundama: ");
        scanf("%f", &t);

        printf("Brzina iznosi: %.2f m/s", s/t);break;

case 2: printf("Unesi brzinu u m/s: ");
        scanf("%f", &v);

        printf("Unesi vrijeme u sekundama: ");
        scanf("%f", &t);

        printf("Duljina puta iznosi: %.2f m", v*t);break;

case 3: printf("Unesi duljinu puta u metrima: ");
        scanf("%f", &s);

        printf("Unesi brzinu u m/s: ");
        scanf("%f", &v);

        printf("Vrijeme iznosi: %.2f s", s/v);break;

case 4: printf("Unesi brzinu u m/s: ");
        scanf("%f", &v);
   
        printf("Unesi vrijeme u sekundama: ");
        scanf("%f", &t);

        printf("Akceleracija iznosi: %.2f m/s2", v/t);break;

case 5: printf("Unesi silu u njutnima: ");
        scanf("%f", &f);
     
        printf("Unesi masu u kilogramima; ");
        scanf("%f", &m);
    
        printf("Akceleracija iznosi %.2f m/s2", f/m);break;

case 6: printf("Unesi akceleraciju u m/s2: ");
        scanf("%f", &a);

        printf("Unesi masu u kilogramima: ");
        scanf("%f", &m);

        printf("Sila iznosi %.2f N", a*m);break;

case 7: printf("Unesi silu njutnima: ");
        scanf("%f", &f);

        printf("Unesi akceleraciju u m/s2: ");
        scanf("%f", &a);

        printf("Masa iznosi %.2f kg", f/a);break;

default: printf"\n Izabrali se pogrješan broj!");break;
}

★★★★★
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Pomoć u C-u
FiCoO kaže...
...

Imas ne zatvorenih zagrada, ne otvorenih zagrada, na jednom mjestu nedostaje ';', koristis varijable koje nisi deklarirao i kôd ti je lose uvucen.

Eh, da, funkcija main bi trebala vracati int, a ne biti void, to je bolje... Ukratko nista strasno i nista sto ne bi i sam primjetio da si imao compiler pri ruci ;)

 

Osim svega nabrojanog, program ti radi, koliko sam uspio vidjeti nabrzinu.

 

#include <stdio.h>

int main()
{
    float s,t,v,f,m,a;
    int b;
   
    printf("Izaberite što želite izračunati");
    printf("\n 1:brzina \n 2:put \n 3:vrijeme \n 4:akceleracija_vt \n 5:akceleracija_fm \n 6:sila \n 7:masa\n");
    printf("Izbor: ");
    scanf("%d", &b);
   
    switch (b)
    {
    case 1: printf("Unesi duljinu puta u metrima: ");
            scanf("%f", &s);
   
            printf("Unesi vrijeme u sekundama: ");
            scanf("%f", &t);
   
            printf("Brzina iznosi: %.2f m/s", s/t);break;
   
    case 2: printf("Unesi brzinu u m/s: ");
            scanf("%f", &v);
   
            printf("Unesi vrijeme u sekundama: ");
            scanf("%f", &t);
   
            printf("Duljina puta iznosi: %.2f m", v*t);break;
   
    case 3: printf("Unesi duljinu puta u metrima: ");
            scanf("%f", &s);
   
            printf("Unesi brzinu u m/s: ");
            scanf("%f", &v);
   
            printf("Vrijeme iznosi: %.2f s", s/v);break;
   
    case 4: printf("Unesi brzinu u m/s: ");
            scanf("%f", &v);
      
            printf("Unesi vrijeme u sekundama: ");
            scanf("%f", &t);
   
            printf("Akceleracija iznosi: %.2f m/s2", v/t);break;
   
    case 5: printf("Unesi silu u njutnima: ");
            scanf("%f", &f);
        
            printf("Unesi masu u kilogramima; ");
            scanf("%f", &m);
       
            printf("Akceleracija iznosi %.2f m/s2", f/m);break;
   
    case 6: printf("Unesi akceleraciju u m/s2: ");
            scanf("%f", &a);
   
            printf("Unesi masu u kilogramima: ");
            scanf("%f", &m);
   
            printf("Sila iznosi %.2f N", a*m);break;
   
    case 7: printf("Unesi silu njutnima: ");
            scanf("%f", &f);
   
            printf("Unesi akceleraciju u m/s2: ");
            scanf("%f", &a);
   
            printf("Masa iznosi %.2f kg", f/a);break;
   
    default: printf("\n Izabrali se pogrješan broj!");break;
    }
   
    return 0;
}

Prepravljena verzija ^

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
Poruka je uređivana zadnji put čet 24.2.2011 20:11 (rustweaver).
14 godina
offline
Pomoć u C-u

pa valjda je za jednog ucenika osmog razreda dobro?{#}

★★★★★
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Pomoć u C-u

Pa je, dobro je. Vjezbom do savrsenstva :P

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
14 godina
offline
Pomoć u C-u

dok ja imam volje za to dobro je..hehe...e sad me zanima posto nisam dosao do lekcije o tipu varijable char...to meni zapravo umjesto da pisem broj za brzinu itd. upisem zapravo brzina i onda mi izbaci sto trebam, jelda?

★★★★★
Moj PC  
0 0 hvala 0
16 godina
moderator
offline
Re: Pomoć u C-u
FiCoO kaže...

to meni zapravo umjesto da pisem broj za brzinu itd. upisem zapravo brzina i onda mi izbaci sto trebam, jelda?

Ovo je hrvatski jezik? LOL

 

 

Varijabla char je veličine jednog bajta i može se na nju gledati kao na cijeli broj ili kao na jedan ASCII znak (slovo, broj, posebni znakovi...). Ako se gleda kao na broj, onda dolazi u dva okusa: signed char (to je defaultni okus), koji ima vrijednost od -128 do 127, ili unsigned char, koji ima vrijednost od 0 do 255. Znači, char može, ovisno o okusu, držati cijeli broj u navedenom rasponu.

 

Ako se na char gleda kao ASCII znak: http://en.wikipedia.org/wiki/ASCII_characters

Recimo slovo 'G' ima brojčanu vrijednost 71, a slovo 'g' ima brojčanu vrijednost 103.

 

Na polje charova se u pravilu gleda kao na niz znakova. Više o tome imaš ovdje: http://www.cplusplus.com/doc/tutorial/ntcs/

14 godina
offline
Pomoć u C-u

hvala kaj si me sad jos vise zbunio ;)

mene samo zanima da sad umjesto broja 1 koji je npr. za brzinu ja taj broj 1 nepisem nego napisem brzina i da mi onda trazi dalje da upisem pu i vrijeme....mozes to objasniti a da me neubijes u pojam{#}

★★★★★
Moj PC  
0 0 hvala 0
16 godina
moderator
offline
Re: Pomoć u C-u
FiCoO kaže...

hvala kaj si me sad jos vise zbunio ;)

mene samo zanima da sad umjesto broja 1 koji je npr. za brzinu ja taj broj 1 nepisem nego napisem brzina i da mi onda trazi dalje da upisem pu i vrijeme....mozes to objasniti a da me neubijes u pojam{#}

 

    int b;
    ...
   scanf("%d", &b);

 

Ono što korisnik upiše, ide u varijablu tipa int. Stoga ne vidim kamo bi korisnik imao za upisati riječ brzina, kad od korisnika tražiš da upiše cijeli broj.

14 godina
offline
Pomoć u C-u

onda sam ja nesto krivo shvatio...ima li onda ikakva naredba da se umjesto brojke pise rijec?

 

★★★★★
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Pomoć u C-u
FiCoO kaže...

onda sam ja nesto krivo shvatio...ima li onda ikakva naredba da se umjesto brojke pise rijec?

korisnicki input prihvati kao string (niz charova - char polje)

The quieter you become, the more you are able to hear...
16 godina
moderator
offline
Re: Pomoć u C-u
FiCoO kaže...

onda sam ja nesto krivo shvatio...ima li onda ikakva naredba da se umjesto brojke pise rijec?

Pa koristiš varijablu u koju možeš zapisati riječ. A to je polje (niz) znakova. Npr. u ovom slučaju polje od 30 znakova nazvali smo rečenica (zapravo, mislim da u tu varijablu možeš spremiti 29 znakova + null-znak, koji označava kraj niza znakova) .

 

   char[30] recenica;
    ...
   scanf("%s", &recenica);

 

Uoči i da smo sada prvi argument promijenili u %s - time govorimo da želimo upisati string (niz znakova).

15 godina
neaktivan
offline
Re: Pomoć u C-u
mbaksa kaže...
FiCoO kaže...

onda sam ja nesto krivo shvatio...ima li onda ikakva naredba da se umjesto brojke pise rijec?

Pa koristiš varijablu u koju možeš zapisati riječ. A to je polje (niz) znakova. Npr. u ovom slučaju polje od 30 znakova nazvali smo rečenica (zapravo, mislim da u tu varijablu možeš spremiti 29 znakova + null-znak, koji označava kraj niza znakova) .

 

   char[30] recenica;
    ...
   scanf("%s", &recenica);

 

Uoči i da smo sada prvi argument promijenili u %s - time govorimo da želimo upisati string (niz znakova).

 

Kada unosiš char polje, onda u scanf-u nema adresnog operatora.

 

Evo ispravan kod:

 

char[30] recenica;
    ...
   scanf("%s", recenica);

 

Nista nije sveto sve je bruto i neto, sve je zabava!
Poruka je uređivana zadnji put čet 24.2.2011 21:57 (Shody_1994).
14 godina
offline
Pomoć u C-u

pa to sam ja i mislio ali izgleda da se nismo dobro razumili....eto jel bi sad mogao jedan primjer ili samo da se pokaze znaci kad ja upisem brzina to kao string?! jel tako? i onda ce mi otvoriti u switch-case pokrenuti case brzina: ? ako sam u krivu ispravite me

★★★★★
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Pomoć u C-u

...
    switch (b)
    {
  ...
    case 'brzina': printf("Unesi brzinu u m/s: ");
            scanf("%f", &v);
   
            printf("Unesi vrijeme u sekundama: ");
            scanf("%f", &t);
   
            printf("Duljina puta iznosi: %.2f m", v*t);break;


...    

valjda je to to, bitno je da b primis kao string :)

The quieter you become, the more you are able to hear...
16 godina
moderator
offline
Re: Pomoć u C-u
Shody_1994 kaže...
Kada unosiš char polje, onda u scanf-u nema adresnog operatora.

 

Evo ispravan kod:

 

char[30] recenica;
    ...
   scanf("%s", recenica);

Istina, pošto je varijabla u biti referenca na prvi znak u polju.

14 godina
neaktivan
offline
Re: Pomoć u C-u
FiCoO kaže...

pa to sam ja i mislio ali izgleda da se nismo dobro razumili....eto jel bi sad mogao jedan primjer ili samo da se pokaze znaci kad ja upisem brzina to kao string?! jel tako? i onda ce mi otvoriti u switch-case pokrenuti case brzina: ? ako sam u krivu ispravite me

U krivu si, switch ne moze usporedivati stringove niti mozes koristiti string kao case. Vidim da je Cerberus sada napisao nesto takvo, radi li to!? :S

 

U C-u zapravo uopce ne mozes usporedivati stringove pomocu znaka jednakosti '=', za to ti treba posebna funkcija (strcmp i slicne).

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
Poruka je uređivana zadnji put čet 24.2.2011 22:16 (rustweaver).
16 godina
offline
Re: Pomoć u C-u
mbaksa kaže...

Istina, pošto je varijabla u biti referenca na prvi znak u polju.

Pointer :P

Q: a kako se to linux ponasa kad crkne hdd? A: zastekava svakih 60 sec,ali prezivi se
14 godina
offline
Re: Pomoć u C-u
rustweaver kaže...
FiCoO kaže...

 

U krivu si, switch ne moze usporedivati stringove niti mozes koristiti string kao case. Vidim da je Cerberus sada napisao nesto takvo, radi li to!? :S

 

U C-u zapravo uopce ne mozes usporedivati stringove pomocu znaka jednakosti '=', za to ti treba posebna funkcija (strcpy i slicne).

mozes mi onda navest neki primjer koji je ispravan? :D

★★★★★
14 godina
neaktivan
offline
Pomoć u C-u

Hmm, nisam siguran sad po pitanju toga. Davno je bilo kada se C radio, ali je u biti logika rjesavanja tu. Implementacija je nesto drugo :/.

 

EDIT:

Ipak ne:

The value of the expressions in a switch-case statement must be an ordinal type i.e. integer, char, short, long, etc. Float and double are not allowed.

The quieter you become, the more you are able to hear...
Poruka je uređivana zadnji put čet 24.2.2011 22:15 (cerberus).
 
0 0 hvala 0
14 godina
offline
Pomoć u C-u

znaci nis od tog sa slovima? :P

★★★★★
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Pomoć u C-u
FiCoO kaže...

mozes mi onda navest neki primjer koji je ispravan? :D

Znaci ti zapravo zelis da korisnik napise "brzina" i da se program prebaci na racunanje brzine?

To bi ovako napravio:

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char b[10];
   
    scanf("%s", b);
   
    if (strcmp(b, "brzina")==0)
    {
       //ovdje ide neki kod
    }

    return 0;
}

 

I moram se ispraviti za prethodni post, nije strcpy za usporedivanje stringova, nego strcmp.

 

cerberus kaže...

The value of the expressions in a switch-case statement must be an ordinal type i.e. integer, char, short, long, etc. Float and double are not allowed.

Jep, samo brojevi. I to jednostavni brojevi (zato i float otpada).

 

FiCoO kaže...

znaci nis od tog sa slovima? :P

Jep, mozes eventualno jedan znak (char). Zato sto je char zapravo broj (bio sam to negdje vec pisao). Ali cijelo polje charova (string) ne mozes...

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
Poruka je uređivana zadnji put čet 24.2.2011 22:22 (rustweaver).
14 godina
offline
Pomoć u C-u

mozda ovako

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char b[10];
  
    scanf("%s", b);
  
    if (strcmp(b, "brzina")==0)
         {  printf("Unesi duljinu puta u metrima: ");
            scanf("%f", &s);
  
            printf("Unesi vrijeme u sekundama: ");
            scanf("%f", &t);
  
            printf("Brzina iznosi: %.2f m/s", s/t);
         }
return 0;
}

★★★★★
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Pomoć u C-u

Slova mogu, 'rijeci' ne. Ipak fail.

Ali nema potrebe da se obeshrabris, ima jos dosta nacina na koje se to moze uraditi.

Morat ces malo gledat c string funkcije (:boring:)

The quieter you become, the more you are able to hear...
Poruka je uređivana zadnji put čet 24.2.2011 22:27 (cerberus).
 
0 0 hvala 0
16 godina
moderator
offline
Re: Pomoć u C-u
Shody_1994 kaže...
mbaksa kaže...
FiCoO kaže...

onda sam ja nesto krivo shvatio...ima li onda ikakva naredba da se umjesto brojke pise rijec?

Pa koristiš varijablu u koju možeš zapisati riječ. A to je polje (niz) znakova. Npr. u ovom slučaju polje od 30 znakova nazvali smo rečenica (zapravo, mislim da u tu varijablu možeš spremiti 29 znakova + null-znak, koji označava kraj niza znakova) .

 

   char[30] recenica;
    ...
   scanf("%s", &recenica);

 

Uoči i da smo sada prvi argument promijenili u %s - time govorimo da želimo upisati string (niz znakova).

 

Kada unosiš char polje, onda u scanf-u nema adresnog operatora.

 

Evo ispravan kod:

 

char[30] recenica;
    ...
   scanf("%s", recenica);

LOL! Nije ispravan. Znaš zašto? Treba ići char recenica[30];

 

Eto, ostao sam malo u Pascalu, gdje se varijale deklariraju u stilu recenica: array[30] of char;

 

 

1domagoj1 kaže...
mbaksa kaže...

Istina, pošto je varijabla u biti referenca na prvi znak u polju.

Pointer :P

Jesi 100% siguran? Možda se to tako inače govori, ali je li zaista riječ o pointeru? Naime, ako je u pitanju pointer, onda bi vrijednost dodjeljivao ovako:

 

*recenica = "abcd";

 

A to ne ide. Ali zato:

 

recenica = "abcd";

 

ide bez problema; Baš kao da varijabli pristupamo "preko reference". {#} Ili pak - pointer možeš preusmjeriti. Ali rečenicu u ovom slučaju ne možeš.

 

    char recenica1[30];
    char recenica2[30];
    char *recenica3;

    recenica2 = recenica1;  // ne prolazi
    recenica3 = recenica1;  // OK

 

Možda se doduše varam...

14 godina
offline
Re: Pomoć u C-u
cerberus kaže...

Slova mogu, 'rijeci' ne. Ipak fail.

Ali nema potrebe da se obeshrabris, ima jos dosta nacina na koje se to moze uraditi.

Morat ces malo gledat c string funkcije (:boring:)

ocu li ja danas mozda od nekoga saznat jel se moze to ikako napraviti..ako ne onda bar da za brzinu napisem b za vrijeme v itd.

★★★★★
Nova poruka
E-mail:
Lozinka:
 
vrh stranice