Programiranje u C-u - od svega pomalo izdvojena tema

poruka: 1.661
|
čitano: 387.118
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Stringovi su u neformatiranoj datoteci gotovo uvijek čitljivi jer 1 znak = 1 byte. Kod brojevnih vrijednosti je drukčije jer long int je 4 byte-a itd.

17 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
TracerCPP kaže...

Stringovi su u neformatiranoj datoteci gotovo uvijek čitljivi jer 1 znak = 1 byte. Kod brojevnih vrijednosti je drukčije jer long int je 4 byte-a itd.

Dakle, nemoguće je u neformatiranu datoteku upisati broj (ako nije u obliku char)? Tj. s kodom je sve u redu?

14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Pa sve je moguće upisati u neformatiranu datoteku, ali kao što ti samo ime kaže (neformatirana) to znači da ti njen sadržaj nije uvijek okom razumljiv jer su podaci različitih tipova tj. veličina. Ako upišeš long int u neformatiranu datoteku vidjeti ćeš nekakvu nerazumljivu kockicu, no isto tako kad pročitaš tu kockicu u programu pomoću fread dobiti ćeš taj konkretni broj.

Moj PC  
0 0 hvala 1
17 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

...

Poruka je uređivana zadnji put pon 18.6.2012 14:48 (i_rambo_plache).
Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Imam jedan algoritam napisan u c-u on se mjenja ovisno o realnom vremenu kako da napisem da unesem neko vrijeme h;m;s i da on pocne brojati i da nakon 5 min refresira algoritam i izracuna ga ponovo sa novim vremenom

 

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
xd_giga kaže...

Imam jedan algoritam napisan u c-u on se mjenja ovisno o realnom vremenu kako da napisem da unesem neko vrijeme h;m;s i da on pocne brojati i da nakon 5 min refresira algoritam i izracuna ga ponovo sa novim vremenom

 

Timeri su vrlo cesto OS dependent. Ako zelis da ti program radi na svakom OS-u probaj prvo pronaci neki Timer library. Ako te to bas ne interesira (a sumnjam da je to tako), i pretpostavljam da radis u win, onda imas negdje funkciju Sleep.

Napravi loop u kojem prvo izvrsis svoj algoritam pa onda spavas.

 

Druga alternativa je da unutar loopa imas drugi loop koji konstantno mjeri vrijeme, no to se zove busy-waiting i vrlo je losa praksa.

 

Treca alternativa (tj. ona koju Sleep koristi) je da uspavas thread na odredjeno vrijeme.

Hypnotize me, mesmerize me, drain the color from my eyes
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Koristit ću rtc čip tako da imam neke rutine za uniju rtc.h file ali sad sam na drugom problemu racunam azimut sunca i program mi pogodi prve 3 decimale dalje fula a meni je bitno da pogodi svih 8 decimala dali su funkcije cos sin asin itd ogranicene sa brojem dec mjesta i zasto mi program sam zaokruzi skrati zapis i kako da ja zaokruzim na 2 decimale a da se to koristi u racunanju a ne samo u ispisu

16 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
xd_giga kaže...

Koristit ću rtc čip tako da imam neke rutine za uniju rtc.h file ali sad sam na drugom problemu racunam azimut sunca i program mi pogodi prve 3 decimale dalje fula a meni je bitno da pogodi svih 8 decimala dali su funkcije cos sin asin itd ogranicene sa brojem dec mjesta i zasto mi program sam zaokruzi skrati zapis i kako da ja zaokruzim na 2 decimale a da se to koristi u racunanju a ne samo u ispisu

Ne, ogranicene su s brojem bitova koje tip podatka koristi... ako ti je float malo, probaj double.

Laicki, sto imas vise znamenki ispred decimalne tocke, to ti vise pada preciznost iza decimalne tocke. No tehnicki float, ako je u rangu 0-1, trebao bi biti precizan do otprilike 7 znamenki.

 

Ako koristis samo float i funkcije iz stdlib-a: greska mora biti negdje drugdje.

Its been so long, I've lost my taste.... Say angel come... Say lick my face...
Poruka je uređivana zadnji put sri 4.7.2012 18:55 (Deus ex machina).
13 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

koristim svuda double i imam recimo broj 16.848765473 a on mi zaokruzi na 16.8487655 recimo tak sad neznam dali je 7 decimala ili 8

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
xd_giga kaže...

koristim svuda double i imam recimo broj 16.848765473 a on mi zaokruzi na 16.8487655 recimo tak sad neznam dali je 7 decimala ili 8

Postaj code.

Its been so long, I've lost my taste.... Say angel come... Say lick my face...
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Vec sam pisao ovdje kako imam knjigu za programiranje u c-u,ali ta knjiga ne valja.Upisem tocno program iz knjige i ne radi.Posto su mi u ovoj temi preporucili codeblocks kao najbolji program za pocetak sada me zanima postoji li neka knjiga koja je pisana prema tome programu?Stvarno me zanima programiranje ali sam zbog te lose knjige skoro odustao.

Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
GARGOYLZTKS1995 kaže...

Vec sam pisao ovdje kako imam knjigu za programiranje u c-u,ali ta knjiga ne valja.Upisem tocno program iz knjige i ne radi.

Knjiga sigurno nije baš *toliko* loša, vjerojatno je samo stara i ne pridržava se nekih današnjih standarda. Svaki kod iz knjige koji ti ne radi stavi ovdje pa će ga već netko od nas prepraviti.

 

GARGOYLZTKS1995 kaže...

Posto su mi u ovoj temi preporucili codeblocks kao najbolji program za pocetak sada me zanima postoji li neka knjiga koja je pisana prema tome programu?

Code Blocks je IDE, knjige koje se bave nekim programskim jezikom se uglavnom ne bave nekim određenim IDE-om. Nije ti valjda Code Blocks tako zbunjujuć da misliš da ti treba knjiga napisana posebno za njega? Kao i za ovo gore, sve probleme i pitanja vezana uz Code Blocks napiši ovdje, ima nas dosta koji koristimo taj IDE pa će ti netko već pomoći.

Oscar-Mike-Golf Whiskey-Tango-Foxtrot
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Krivo sam se izrazio.Meni je jasno da je knjiga zastarjela i to sam mislio pod losa.Takoder sam krivo napisao u vezi codeblocksa.Meni ne treba knjiga za ucenje rada u codeblocksu nego neka knjiga gdje je objasnjen jezik c ili c++.Znaci meni bi trebala knjiga koja krece od Hello world programa pa do komliciranijih.Dali je bolje da krenem sa c-om pa onda c++ ili?

Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo
 
0 0 hvala 0
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Evo jedan kalkulator kojeg radim...planiram dodati još neku funkciju(po mogućnosti u vanjskoj datoteci)   za spremanje rezultata(prije toga se postavi if else naredba,i na početku dodati kod za čitanje tog istog rezultata...jednog dana bih to htio napraviti...Ako sami smislite kako to napraviti hvala vam unaprijed.

#include <stdio.h>
int main (void)
{
float var1,var2,rez;
int command;
int k;
while(k=1)
{
printf("**************************\n");
printf("*-- Terminal calculator --*\n");
printf("**************************\n");
printf("\n");
printf("Choose operation\n");
printf("\n");
printf("[1] Multiply \n");
printf("[2] Divide \n");
printf("[3] Plus \n");
printf("[4] Minus \n");
printf("[5] Module of 2 numbers \n");
printf("[6] Percentage \n");
printf("[7] Exit \n");
int k=0;
scanf ("%d", &command);
switch(command)
{
case 1:
printf("WRITE THE FIRST AND SECOND OPERAND\n\n");
printf("First operand:\n");
scanf ("%f", &var1);
printf("\n");
printf("Second operand:\n");
scanf ("%f", &var2);
rez = (var1 * var2);
printf ("Result: %f\n", rez);
break;
case 2:
printf("WRITE THE FIRST AND SECOND OPERAND\n\n");
printf("First operand:\n");
scanf ("%f", &var1);
printf("\n");
printf("Drugi operand:\n");
scanf ("%f", &var2);
rez = (var1 / var2);
printf ("Result: %f\n", rez);
break;
case 3:
printf("WRITE THE FIRST AND SECOND OPERAND\n\n");
printf("First operand:\n");
scanf ("%f", &var1);
printf("\n");
printf("Second operand:\n");
scanf ("%f", &var2);
rez = (var1 + var2);
printf ("Result: %f\n", rez);
break;
case 4:
printf("WRITE THE FIRST AND SECOND OPERAND\n\n");
printf("First operand:\n");
scanf ("%f", &var1);
printf("\n");
printf("Second operand:\n");
scanf ("%f", &var2);
rez = (var1 - var2);
printf ("Result: %f\n", rez);
break;
case 5:
printf("WRITE THE FIRST AND SECOND OPERAND\n\n");
printf("First operand:\n");
scanf ("%f", &var1);
printf("\n");
printf("Second operand:\n");
scanf ("%f", &var2);
rez = ((int)var1 % (int)var2);
printf ("Result: %f\n", rez);
break;
case 6:
printf("WRITE THE FIRST AND SECOND OPERAND\n\n");
printf("First operand:\n");
scanf ("%f", &var1);
printf("\n");
printf("Second operand:\n");
scanf ("%f", &var2);
rez = ((var1 * var2)/100);
printf ("Result: %f %\n", rez);
break;
case 7:
goto end;
break;
default:
printf ("Unijeli ste krivi znak!\n");
}
}
end:
return 0;
}

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
g12356 kaže...

planiram dodati još neku funkciju(po mogućnosti u vanjskoj datoteci)

Ne treba ti više source datoteka, prvo razbij ovaj main monstrum na više dijelova.

 

g12356 kaže...

int main (void)

Ne to raditi.

 

ili

int main()

ili

int main(int argc, char **argv)

 

 

g12356 kaže...

int k;
while(k=1)

??

Prvo, varijablu "k" nisi inicijalizirao, drugo, ovo što radiš nije provjera ima li varijabla "k" vrijednost 1, nego dodjeljivanje vrijednosti 1 varijabli "k". Naučiti razliku između operatora dodjeljivanja vrijednosti i operatora jednakosti.

 

http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Arithmetic_operators

http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Comparison_operators.2Frelational_operators

 

Trebaš napraviti ovo:

int k=1;
while (k==1)

 

g12356 kaže...

Evo jedan kalkulator kojeg radim...planiram dodati još neku funkciju(po mogućnosti u vanjskoj datoteci)   za spremanje rezultata(prije toga se postavi if else naredba,i na početku dodati kod za čitanje tog istog rezultata...jednog dana bih to htio napraviti...Ako sami smislite kako to napraviti hvala vam unaprijed.

#include <stdio.h>
int main (void)
{
int k;
while(k=1)
{
int k=0;

Zašto dva puta deklariraš varijablu 'k'?

Dovoljno je da u drugom slučaju samo staviš:

k=0;

 

Ali ti taj cijeli izraz nije potreban...

 

g12356 kaže...

case 7:
goto end;
break;
default:
printf ("Unijeli ste krivi znak!\n");
}
}
end:
return 0;
}

Goto? Što će ti to? Zašto ne postaviš "k" na nulu i pustiš da while uvijet ne bude zadovoljen?

 

Tu su još i problemi sa nepostojećim uvlačenjem (nadam se da je to do kopiranja koda i forumskog editora a ne do tebe). Sve u svemu evo neka urednija i malo ispravljena verzija:

http://pastebin.com/J5gjuNNq

Oscar-Mike-Golf Whiskey-Tango-Foxtrot
Poruka je uređivana zadnji put čet 12.7.2012 18:14 (rustweaver).
15 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

Hvala,joj,kakve bezvezne greške radim dok sve radim na brzinu...

Ja sam Plavi zmaj.Form the future!Masa,društvo većina,''normalni'' su ništa bez onih pojedinaca koji ih čine.
Moj PC  
0 0 hvala 0
17 godina
offline
Programiranje u C-u - od svega pomalo

Unesi varijable prije ulaska u switch, da ne ponavljaš kod.
A switch grananje možeš napraviti i sa char znakovima, imaš prirodniji unos.
A ako žeiš izbor između prekida i nastavka rada programa, riješi to ovako:

 

#include <iostream>
using namespace std;

int main(){
    char nastavak = 'y';
    while(tolower(nastavak) == 'y')
    {
       char znak;
       cin>> znak;
       int broj1=5, broj2=3, rezultat;
       switch(znak)
       {
          case '+':
          rezultat = broj1 + broj2;
          break;
          case '-' :
          rezultat = broj1 - broj2;
          break;
       }
       cout<< rezultat << endl;
       cout<< "Zelis li nastaviti <Y>/<N>: ";
       cin>> nastavak;
    }

    return 0;
}

 

I onda taj switch možeš staviti u funkciju double Izracun(double broj1, double broj2, char znak), radi preglednosti i ponovne upotrebe.

Poruka je uređivana zadnji put čet 12.7.2012 20:22 (Floki).
 
3 0 hvala 0
13 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

zdravo ljudi, ja znam da je ovo pitanje ovdje milion puta ispitano al sta cu ev i ja cu ga pitati.

posto mislim da se pocnem baviti programiranjem i nadam se da mi nije jos kasno :D, s kojim jezikom da prvo krenem

hvala unaprijed

 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
jumper11 kaže...

zdravo ljudi, ja znam da je ovo pitanje ovdje milion puta ispitano al sta cu ev i ja cu ga pitati.

posto mislim da se pocnem baviti programiranjem i nadam se da mi nije jos kasno :D, s kojim jezikom da prvo krenem

hvala unaprijed

Šta milion...

Natucati na silu jezik nekome je loša praksa. Ako kreneš sa bilo kojim od C-like jezika, nećeš pogriješiti. Možda bi bilo najbolje da odmah ideš na C# i da učiš OOP. Ali valjalo bi znati to na malo nižoj razini - C++. Pogledaj primjere C++ kôda i C# kôda pa vidi.

Ovdje je sve rečeno:
http://www.bug.hr/forum/topic/programiranje/odabir-programskog-jezika-potpunog-pocetnika/95833.aspx

http://www.bug.hr/forum/topic/programiranje/programski-jezik-kojim-poceti/84440.aspx

14 godina
neaktivan
offline
Dva pitanja (program C)

1.)Mogu li se usporediti dva niza znakova bez uporabe pokazivača i funkcije strcmp() ???

2.)Može li se pomoću funkcije getchar() i for petlje definirati znakovni niz?

 

PROBLEM:

Napišite program koji učitava dva niza znakova i ispituje da li su ti nizovi jednaki.
Kraj učitavanja niza određen je oznakom za prijelaz u novi redak ('\n'). 

 

Jel mi može netko pomoći?

 

Unaprijed hvala.

 
0 0 hvala 0
15 godina
offline
Re: Dva pitanja (program C)
Hattrick kaže...

1.)Mogu li se usporediti dva niza znakova bez uporabe pokazivača i funkcije strcmp() ???

Pa ti sa nekim nizom uopce ne mozes uopce baratati bez pokazivaca. Kad imas automatske nizove, ime niza je ustvari simbolicko ime za adresu provoga clana niza. Dakle ako uopce koristis niz, onda autmatski koristis pokazivace.

 

A dva niza mozes usporediti bez funkcije strcmp(), ako koristis neku drugu funkciju ili napises svoj kod

Hattrick kaže...

 

2.)Može li se pomoću funkcije getchar() i for petlje definirati znakovni niz?

Ne mozes stvoriti znakovni niz, ali mozes upisivati vrijednosti u vec definiran znakovni niz. No ne vidim smisao zasto bi to radio.

 

Hattrick kaže...

PROBLEM:

Napišite program koji učitava dva niza znakova i ispituje da li su ti nizovi jednaki.
Kraj učitavanja niza određen je oznakom za prijelaz u novi redak ('\n'). 

 

Jel mi može netko pomoći?

 

Unaprijed hvala.

Dakle, ucitavamo prvo dva niza, pa onda prvo moramo stvoriti dva znakovna niza. No buduci da ne znamo koliko ce nizovi imati tocno znakova, moramo staviti neku vrijednost koja ce odredivati maksimalnu kolicinu clanova niza. Ja cu staviti vrijednost 100. Tu vrijednost cemo staviti kao konstantu pomocu pretprocesorke naredbe #define tj. odmah ispod #include <stdio.h> stavit cemo #define nekoIme 100. Pomocu te naredbe, kompajler ce odmah na pocetku programa na svim mjestima gdje pise nekoIme, zamijeniti tu rijec sa brojem 100.

 

Nakon sto smo stvorili dva znakovna niza, moramo u njih ucitati vrijednosti. Buduci da ucitavamo cijeli red(tj. do znaka za prijelaz u novi red), najbolje bi bilo koristiti funkciju gets() koja nam radi upravo to. Mogli bismo pomocu getchar() funkcije, tako da for petljom ucitavamo znak po znak i provjeravamo je li prijelaz u novi red. I umjesto for petlje bilo bi puno bolje koristiti while petlju.

 

Nakon ucitavanja dva niza moramo usporediti. Prvo cemo usporediti njihove duzine, ako nisu jednako onda nisu ni nizovi jednaki, a ako su jednake onda nizove ih usporedujemo pomocu for petlje, znak po znak:

#include <stdio.h>
#include <string.h>
#define maxSize 100

int main(){
    /*stvaramo nizove*/
    char prviNiz[maxSize], drugiNiz[maxSize];

    /*ucitavamo nizove*/
    gets(prviNiz);
    gets(drugiNiz);

    /*uzimamo njihove duzine*/
    int duzinaPrviNiz = strlen(prviNiz);
    int duzinaDrugiNiz = strlen(drugiNiz);

    /*usporedba nizova*/

    /*usporedba njihove duzine*/
    if(duzinaPrviNiz == duzinaDrugiNiz){
        /* ako su duzine jednake usporedujemo znak po znak*/

        /*u varijablu razlicit pohranjujemo jesmo li pronasli ijedan razlicit znak*/
        int razlicit = 0;
        int i;
        for(i = 0; i < duzinaPrviNiz; i++){
            /* ako su dva znaka sa istom pozicijom razlicita ispisujemo poruku, stavimo varijablu
             * razlicit u 1, i prekinemo petljanje*/
            if(prviNiz[i] != drugiNiz[i]){
                printf("Nizovi nisu jednaki!\n");
                razlicit = 1;
                break;
            }
        }

        /* ako je varijabla razlicit 0, znaci da nismo nasli ni jedan razlicit znak, pa znaci da su
         * nizovi jednaki */
         if(razlicit == 0)
            printf("Nizovu su jednaki!\n");

    }
    else{
        /* nizovi nemaju jednaku duzinu pa nisu jednaki, pa ispisujemo prouku*/
        printf("Nizovi nisu jednaki\n");
    }
    return 0;
}

Mogli smo umjesto gets(imeNiza), dva niza ucitati pomocu getchar() i while petlje:

/* varijabla u koju cemo pohranjivati trenutni znak*/
    char znak;
    /*unosimo prvi znak*/
    znak = getchar();
    /*prva pozicija u nizu je 0*/
    i = 0;
    while(znak != '\n'){
       /* dok je razlicit od znaka za prijelaz u novi red, mi taj znak pohranimo
        * u niz, ucitamo sljedeci znak, i povecamo poziciju za 1*/
        prviNiz[i] = znak;
        znak = getchar();
        i++;
    }
    /* na kraj niza stavimo null znak jer svi znakovni nizovi moraju
    * sa njime zavrsiti*/
    prviNiz[i] = '\0';

pa bi cijeli kod izgledao ovako:

#include <stdio.h>
#include <string.h>
#define maxSize 100

int main(){
    /*stvaramo nizove*/
    char prviNiz[maxSize], drugiNiz[maxSize];

    /*varijabla za prolazenje kroz nizove u for i while petlji */
    int i;

    /*ucitavamo nizove*/

    /* varijabla u koju cemo pohranjivati trenutni znak*/
    char znak;
    /*unosimo prvi znak*/
    znak = getchar();
    /*prva pozicija u nizu je 0*/
    i = 0;
    while(znak != '\n'){
       /* dok je razlicit od znaka za prijelaz u novi red, mi taj znak pohranimo
        * u niz, ucitamo sljedeci znak, i povecamo poziciju za 1*/
        prviNiz[i] = znak;
        znak = getchar();
        i++;
    }
    /* na kraj prvoga niza stavimo nullznak jer svi znakovni nizovi moraju
    * sa njime zavrsiti*/
    prviNiz[i] = '\0';

    /*unosimo prvi znak*/
    znak = getchar();
    /*prva pozicija u nizu je 0*/
    i = 0;
    while(znak != '\n'){
       /* dok je razlicit od znaka za prijelaz u novi red, mi taj znak pohranimo
        * u niz, ucitamo sljedeci znak, i povecamo poziciju za 1*/
        drugiNiz[i] = znak;
        znak = getchar();
        i++;
    }
    /* na kraj drugi niza stavimo nullznak jer svi znakovni nizovi moraju
    * sa njime zavrsiti*/
    drugiNiz[i] = '\0';

    /*uzimamo duzine nizova*/
    int duzinaPrviNiz = strlen(prviNiz);
    int duzinaDrugiNiz = strlen(drugiNiz);

    /*usporedba nizova*/

    /*usporedba njihove duzine*/
    if(duzinaPrviNiz == duzinaDrugiNiz){
        /* ako su duzine jednake usporedujemo znak po znak*/

        /*u varijablu razlicit pohranjujemo jesmo li pronasli ijedan razlicit znak*/
        int razlicit = 0;
        for(i = 0; i < duzinaPrviNiz; i++){
            /* ako su dva znaka sa istom pozicijom razlicita ispisujemo poruku, stavimo varijablu
             * razlicit u 1, i prekinemo petljanje*/
            if(prviNiz[i] != drugiNiz[i]){
                printf("Nizovi nisu jednaki!\n");
                razlicit = 1;
                break;
            }
        }

        /* ako je varijabla razlicit 0, znaci da nismo nasli ni jedan razlicit znak, pa znaci da su
         * nizovi jednaki */
         if(razlicit == 0)
            printf("Nizovu su jednaki!\n");

    }
    else{
        /* nizovi nemaju jednaku duzinu pa nisu jednaki, pa ispisujemo prouku*/
        printf("Nizovi nisu jednaki\n");
    }
    return 0;
}

I would love to change the world, but they won't give me the source code
17 godina
offline
Programiranje u C-u - od svega pomalo

Može i bez pomoćne varijable, da se iskoristi brojač petlje za usporedbu, ako je petlja prekinuta prije kraja znači da nizovi nisu jednaki.

 

 

for(index = 0; index<strlen(niz1); i++)

{

        . . .

}

if(index == strlen(niz1)

     printf("Jednaki nizovi\n);

else

     printf("Nizovi nisu jednaki\n");

 

Fora iz Tracerove knjige, kolko se sjećam.

 
2 0 hvala 1
17 godina
offline
Programiranje u C-u - od svega pomalo

A evo i nešto moje, da se pojednostavi kod u igru se uvodi tenary operator,  petlja se pokreće jedino ako su duljine nizova jednake, i ide se na završnu provjeru, neovisno da li se petlja pokrenula, došla do kraja ili nije.

 


#include <stdio.h>
#include<string.h>

int main ()
{
   int index, brojZnamenki;
   char niz1[100], niz2[100];
   gets(niz1);
   gets(niz2);

   brojZnamenki = strlen(niz1) == strlen(niz2) ? strlen(niz1) : -1;

   for(index = 0; index<brojZnamenki; index++)
   {
      if(niz1[index] != niz2[index])
         break;
   }
   if(index==brojZnamenki)
      printf("Jednaki nizovi\n");
   else
      printf("Nejednaki nizovi\n");
    return 0;
}

Poruka je uređivana zadnji put sub 11.8.2012 14:16 (Floki).
 
1 0 hvala 1
14 godina
neaktivan
offline
Programiranje u C-u - od svega pomalo

 

 

Napišite program u koji korisnik unosi ocjene ispita, sve dok ne unese 0(nula). Ocjene izvan intervala (1-5)  se zanemaruju.

Program treba ispisati koliko je ucenika izaslo na ispit, koliko ih je položilo, koliko palo i koja je prosječna ocjena.

 

Pitanje:

Program naime radi sve zadano, ali postoji li ikakva bolja solucija, jer mi program upozorava na jednu liniju gdje sam komentirao  "(povratak u petlju)"

Opet, unaprijed hvala, a pogotovo hvala za onaj problem od prije par dana .

 

 

#include <stdio.h>

 

 

float aritmetickasredina(int x, int y){     //zasebna funkcija A(s)

   float z;

   z=(float(x)/float(y));

   return z;

}

 

 

void main()

{

   float as;

   int neg=0;

   int poz=0;

   int sum=0;

   int br=0;

   int oc=1;                                          //?????????? (za prvi prolaz)

 

 

   printf("Unesite rezultate ispita:\n");

   while(oc!=0){

       scanf("%d",&oc);

       if((oc>=1)&&(oc<=5)){

              br++;

              sum=sum+oc;

              if(oc==1) neg++;

              if(oc>1) poz++;

       }

        else oc!=0;                                    // ?? (povratak u petlju)

    } 

 

     printf("Ukupno izaslo na ispit: %d \t Polozilo ucenika: %d \t Palo ucenika %d \n",br,poz,neg);

     as=aritmetickasredina(sum,br);

     printf("Prosječna ocjena ispita je: %.2f\n",as);

 

     getchar(); 

     getchar();

}

Poruka je uređivana zadnji put sri 15.8.2012 5:46 (Hattrick).
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
Hattrick kaže...

 

 

Napišite program u koji korisnik unosi ocjene ispita, sve dok ne unese 0(nula). Ocjene izvan intervala (1-5)  se zanemaruju.

Program treba ispisati koliko je ucenika izaslo na ispit, koliko ih je položilo, koliko palo i koja je prosječna ocjena.

Prvo:

void main()

 

To se ne radi. Main je funkcija koja vraća integer i tako ju treba deklarirati. Dakle:

int main()

 

 

Drugo:

float(x)

 

ovo je jedan od C++ type castinga, a ne C casting. U C-u se to radi ovako:

(float)x

 

 

S time na stranu evo taj tvoj kod nakon nekih kozmetičkih izmjena:

#include <stdio.h>

float aritmetickasredina(int x, int y)
{
    return ((float)x/y);
}

int main()
{
    int neg=0, poz=0, sum=0, oc=0;

    printf("Unesite rezultate ispita:\n");
    do
    {
        scanf("%d", &oc);
        sum+=oc;

        if (oc==1)
            neg++;
        if (oc>1 && oc<6)
            poz++;
    }
    while (oc>0 && oc<6);

    printf("Ukupno izaslo na ispit: %d \t Polozilo ucenika: %d \t Palo ucenika %d \n", poz+neg, poz, neg);
    printf("Prosjecna ocjena ispita je: %.2f\n", aritmetickasredina(sum, poz+neg));

    getchar();
    getchar();
   
    return 0;
}

 

Funkciju "aritmetickasredina" možeš izbaciti jer ne radi ništa komplicirano (a i mogao si ju imenovati "prosjek" kraće je). Savjetujem ti i da ne kratiš toliko imena varijabli, "neg" i "poz" još kako tako, ali zašto "sum" (engleski) a ne "zbroj", i zašto "oc" zar je tako teško napisati "ocjena"?

 

EDIT: nisam imao nikakvo upozorenje na mjestu gdje si komentirao "povratak u petlju", ali mi je zato kompajler na onaj casting izbacio error i nije htio dalje dok to nisam prepravio. Koje upozorenje si dobivao?

Oscar-Mike-Golf Whiskey-Tango-Foxtrot
Poruka je uređivana zadnji put sri 15.8.2012 12:47 (rustweaver).
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
rustweaver kaže...

Drugo:

float(x)

 

ovo je jedan od C++ type castinga, a ne C casting. U C-u se to radi ovako:

(float)x

 

1) Oboje je ista stvar i svejedno je kako je napisano tj. da li float(x) ili (float)x.

2) To nije C++ type casting već obična statička pretvorba koji se u C++u može napisati i ovako:

 

static_cast<float>(x)

 

Specifične C++ pretvorbe su još i dynamic_cast, reinterpret_cast i const_cast.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Poruka je uređivana zadnji put sri 15.8.2012 15:36 (TracerCPP).
15 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo
TracerCPP kaže...
1) Oboje je ista stvar i svejedno je kako je napisano tj. da li float(x) ili (float)x.

Je, samo što je jedna važeći C konstrukt, a druga verzija postoji samo u C++-u.

 

TracerCPP kaže...
Specifične C++ pretvorbe su dynamic_cast, reinterpret_cast i const_cast.

Da a ovo je functional notation casting, kojeg nema u C-u. C sintaksa za casting je drukčija.

 

ISO iec 9899-1999 § 6.5.4

 

Syntax
1 cast-expression:
    unary-expression
    ( type-name ) cast-expression

Oscar-Mike-Golf Whiskey-Tango-Foxtrot
14 godina
neaktivan
offline
Re: Programiranje u C-u - od svega pomalo

Istina. Funcional notation casting nije podržan u C-u.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
17 godina
offline
Re: Programiranje u C-u - od svega pomalo
Hattrick kaže...

 

 

Napišite program u koji korisnik unosi ocjene ispita, sve dok ne unese 0(nula). Ocjene izvan intervala (1-5)  se zanemaruju.

Program treba ispisati koliko je ucenika izaslo na ispit, koliko ih je položilo, koliko palo i koja je prosječna ocjena.

 

Pošto ti se u zadatku traži da zanemariš ocjene izvan intervala [1,5] else grananje if uvjeta nije potrebno, btw. while petlja se vrti dok se  ispunjava uvjet da je ocjena različita od 0, a taj izraz else oc != 0 nema smisla, mada se kompiler ne buni, za njega je dozvoljeno sve što nije zabranjeno.

Također ti ni dva if uvjeta da bi dobio povećanje brojača nisu potrebna, u tom dijelu koda već imaš filltrirane  ocjene izvan intervala, i filtriranu nulu, dakle dovoljno je staviti:

if(oc==1)

     neg++;

 

Dakle ovako:

 

#include <stdio.h>

int main()
{
   int neg=0;
   int oc=1;
   int sum=0;
   int broj=0;
 
   printf("Unesite rezultate ispita:\n");
   while(oc!=0){
       scanf("%d",&oc);
       if((oc>=1)&&(oc<=5))
      {
         broj++;
         sum += oc;
         if(oc==1)
            neg++;
      }
    }
    printf("Ukupno izaslo na ispit: %d \t Polozilo ucenika: %d \t Palo ucenika %d \n",broj,broj-neg,neg);
    printf("Prosjecna ocjena ispita je: %.2f\n",(float)sum/broj);
 
    getchar();
    return 0;
}

 

 

btw. nikad od mene statističara po volji političara, istakao sam varijablu negativnih, a pozitivni su prikriveni{#}

 

 

 

Poruka je uređivana zadnji put čet 16.8.2012 12:57 (Floki).
Nova poruka
E-mail:
Lozinka:
 
vrh stranice