IRebic pon 7.2.2011 11:50

Evo jedne teme gdje možete "iskrcavati" vaše programe napisane u C-u, nikad se ne zna možda nečije ideje budu nekome drugome korisne, a osim toga ovdje će sigurno biti dosta primjera jednostavnih stvari koje mogu dosta pomoći početnici...

Pravila:

1. piše se cijeli kod programa.

2. mora se napisati što taj program radi

3. ako je program zloćudne prirode autor je to dužan NAGLASITI a ne samo reći radi to i to..

4. držite se pravila...

IRebic pon 7.2.2011 11:52

Evo odmah jedan moj, nešš jednostavno korisnik unese godinu a program ispisiva koje je to stoljeće i tisućljeće (radi i za godine P.K.)

 

#include<stdio.h>
#include<conio.h>
int a,b,st,ti;
main()
{
      printf("Upisite godinu i pritisnite ENTER ako je godina prije krista stavite predznak -\n");
      scanf("%d",&a);
      if(a>0)
      {
      st=a/100+1;
      ti=a/1000+1;
      printf("%d. godina je u %d. stoljecu i u %d. tisucljecu!",a,st,ti);
      }
      else
      {
      b=a*-1;
      st=b/100+1;
      ti=b/1000+1;
      printf("%d. godina prije krista je u %d. stoljecu prije krista i u %d. tisucljecu prije krista!",b,st,ti);
      }
      getch();
}

FiCoO pon 7.2.2011 11:57

zanimljivo...to bi moglo pomoci recimo osnovcima kojima neide povijest i ne snalaze se bas u stoljecima....ja sam poceo ucit programirat evo ima tjedan dana i imam vec jednu ideju koja bi bila dobra...a poslije sa vizualnim poboljsanjem bi mogao cak i zaradit nesto za to....evo ideja....program za vodit evidanciju u videoteci...znaci da se upise ime prezime koji je broj clana i sto je posudio....zapravo baza podataka...to mi je prvi projekt cim naucim ove neke osnove programskog jezika

Luuka pon 7.2.2011 12:32

Zanimljiva tema :D

 

Ja ću priložiti svoja 2 programa.

 

Prvi program je prva verzija programa za praćenje nogometnih liga. U datoteku se upisuju rezultati, pokrene se program i u drugoj datoteci se dobije tablica.

LINK

 

Drugi program je kompliciraniji, radio sam ga za kolegij Mreže računala na faxu. Radi se 2 koda, jedan koji se vrti na računalu koji je Server, a drugi je za Klijenta. Igra se igra "pogodi broj". Server zamisli neki broj, a klijenti pogađaju. U svakom koraku server javlja da li je pogođeno, da li je broj manji ili veći od tog pokušaja. Igra je organizirana kao mala liga, gdje svaki igrač igra sa svakim. Na kraju svaki igrač dobije tablicu s bodovima.

LINK - pod Mreže računala

 

Na zadnjem linku ima kodova i za neke druge kolegije, možda će nekom biti korisno (pogotovo implementacije struktura podataka)

 

Uploadao sam jošneke programe koje sam davno rješavao. Bili su zadani na nekoj stranici za one koji vole programirat, pa neko interno natjecanje. Neki su jako trivijalni, a neki su nešto teži. Za one koji vole programirati svakako neka probaju. Ovi programi su pisani u C++u.

 

p.s. Isprike za nepridržavanje pravila oko postanja cijelog koda, ali kodovi su poveći pa ne bi baš imalo smisla cijele ih stavljat :D

jurluk pon 7.2.2011 13:52

evo jedan koji sam sklepao u dvadesetak minuta

iz kôda se vidi sta radi

 

planiram ga kasnije "nadograditi" sa naprednijim mogućnostima Smijeh

 

#include <stdio.h>

int main (){

    float t;

    printf ("\tOVO JE PROGRAM KOJI POKAZUJE KOLIKO BI IZNOSILA\n"
          "\t   VASA TEZINA NA TIJELIMA SUNCEVOG SUSTAVA\n");
    printf("\n Unesite vasu tezinu: ");
    scanf("%f", &t);

    printf("\n Vasa tezina na tijelima Suncevog sustava bi izgledala ovako:\n\n");
    printf (" TIJELO    TEZINA u kg\n"
          " ------    -----------");

    printf("\n Sunce:    %7.2f kg", t*27.072);
    printf("\n Merkur:   %7.2f kg", t*0.378);
    printf("\n Venera:   %7.2f kg", t*0.907);
    printf("\n Zemlja:   %7.2f kg", t*1);
    printf("\n Mjesec:   %7.2f kg", t*0.166);
    printf("\n Mars:     %7.2f kg", t*0.377);
    printf("\n Jupiter:  %7.2f kg", t*2.364);
    printf("\n Saturn:   %7.2f kg", t*0.916);
    printf("\n Uran:     %7.2f kg", t*0.889);
    printf("\n Neptun:   %7.2f kg", t*1.125);

    getch();
    return 0;
}

Floki pon 7.2.2011 14:46

Evo jedan za zabavu, program simulira LOTO bubanj i izvlačenje kuglica 7/39

Na osnovu unesene kombinacije izračunava period i broj izvlačenja koji je potreban da bi se ta kombinacija dobila.

Naravno, za predviđanje izvlačenja je beskoristan jer radi na istom računu vjerojatnosti kao pravi bubanj.

Nadam se da ne smeta što je pisan u C++.

 

/* LOTO KOMBINACIJE */
/* NAPOMENA: PROGRAM SLUŽI SAMO U ZABAVNE SVRHE I POTPUNO JE BESKORISAN KOD IGRANJA LOTA - DA JE KORISTAN JA BI BIO BOGATAŠ */

#include<iostream>
#include<ctime>
#include <cstdlib>
using namespace std;

int vjerojatnost(int *loto, int br, int *niz, int brI,  int *m) {
    int  i = 0, j, k, l, s, pom ;
   
    srand((unsigned)time(0));

    for(i=0; i<10400000000000000; i++) {
       *m = (i+1);
       j = 0;
       niz[j] = (rand()%39) + 1;

       while(j<6) {
          j++;
          do {
             l = 0;

             niz[j] = (rand()%39) + 1;

             for(k=j; k>0; k--)
                if(niz[j] == niz[k-1])
                   l++;
          }while(l != 0);

       }
    for(j=0; j<6; j++)
       for(k=0; k<6-j; k++)
          if(niz[k+1]< niz[k]) {
             pom = niz[k];
             niz[k] = niz[k+1];
             niz[k+1] = pom;
          }

   
    s = 0;
    for(j=0; j<=6; j++)
       if(loto[j] == niz[j])
          s++;
   
    if(s == 7)
       return s;
}

return s;
}


void main() {
    int loto[7], niz[7],  i=0, j, pom, m, s;
    cout<< "Unesi 7 brojeva u kombinaciju - raspon brojeva<1-39>: " << endl;
    cout<< "Unesi 1. broj: ";
    cin>> loto[i];
    for(i=1; i<=6; i++) {

       do {
          cout<< "\nUnesi " << (i+1) << ". broj: ";
          cin>> loto[i];
          if(loto[i]<1 || loto[i]>39 )
             cout<< "\nBroj mora biti u rasponu <1-39>!";
          }while(loto[i]<1 || loto[i]>39);
      
       j = i;
       while (j>0) {
          if(loto[i] == loto[j-1]) {
             cout<< "\nBroj mora biti razlicit od prethodnih!";
             cout<< "\nUnesi " << (i+1) << ". broj: ";
             cin>> loto[i];
          }
          j--;
       }

          }

    for(i=0; i<6; i++)
       for(j=0; j<6-i; j++)
          if(loto[j+1] < loto[j]) {
             pom = loto[j];
             loto[j] = loto[j+1];
             loto[j+1] = pom;
          }
    cout<< "\nUnesena kombinacija: ";
    for(i=0; i<=6; i++)
       cout<<  loto[i] << " ";
    cout<< endl;


    s = vjerojatnost(loto, 7, niz, 7,  &m);

   
    if(s == 7) {
       cout<< "Kombinacija je pogodjena!!!";
       cout<< "\nDobitna kombinacija : " << endl;
       for(i=0; i<=6; i++)
          cout<< niz[i] << " ";
       cout<< "\nKombinacija je izvucena nakon: " << ((float)m/104) << " godina." << endl;
       cout<< "\nBroj izvlacenja za dobitnu kombinaciju: " << m << endl;
    }
    else {
       cout<< "Kombinacija nije pogodjena niti nakon: " << ((float)m/104) << " godina." << endl;
       cout<< "\nBroj izvlacenja: " << m << endl;
    }


   


    system("pause");


    }



 

Luuka pon 7.2.2011 14:52

@Floki - jedna sugestija za tvoj program... kad već radiš u c++-u, možda je dobra ideja koristiti SET iz STLa. SET je struktura podataka koja automatski sortira elemente i drži po jednu kopiju svakog. Također postoje fje za provjeru da li je neki element unutra itd. Ušparao bi dosta linija koda, a možda bi bilo i brže zbog sortiranosti.

Floki pon 7.2.2011 14:55
Luuka kaže...

@Floki - jedna sugestija za tvoj program... kad već radiš u c++-u, možda je dobra ideja koristiti SET iz STLa. SET je struktura podataka koja automatski sortira elemente i drži po jednu kopiju svakog. Također postoje fje za provjeru da li je neki element unutra itd. Ušparao bi dosta linija koda, a možda bi bilo i brže zbog sortiranosti.

Istina, ovo sam napravio na nivou znanja petlji i funkcija, sad bi tako kako kažeš

Private pon 7.2.2011 15:33
FiCoO kaže...

zanimljivo...to bi moglo pomoci recimo osnovcima kojima neide povijest i ne snalaze se bas u stoljecima....ja sam poceo ucit programirat evo ima tjedan dana i imam vec jednu ideju koja bi bila dobra...a poslije sa vizualnim poboljsanjem bi mogao cak i zaradit nesto za to....evo ideja....program za vodit evidanciju u videoteci...znaci da se upise ime prezime koji je broj clana i sto je posudio....zapravo baza podataka...to mi je prvi projekt cim naucim ove neke osnove programskog jezika

 Ovo što si nabrojao je tipični zadatak na nekim završnim kolokvijima naših veleučilišta informatičkog smjera ali u C#-u i ASP.Net-u i SQL bazom podataka ,naravno i ADO je uključen.Mislim da bi trebao proći malo više od osnova ali svaki trud se nagrađuje :)...inače tema je odlična ako se ne ode u off topic.

 

 

 

Private pon 7.2.2011 15:58
FiCoO kaže...

oke....ali ja sam osmas samo da znas i jako me zanima programiranje....i posudio sam knjigu od frendove sestre C jezik od tatjane stranjak i vesne tomic....dobra knjiga za pocetak?

 ....samo naprijed jer ako dobro svladaš bilo koji jezik iz "c porodice" jezika odlično !.....Za početak su sve knjige dobre a kad budeš razumio i naučio dosta primjera i sam češ shvatiti koja ti je knjiga potrebna za nastavak.

 

FiCoO pon 7.2.2011 16:06

pa zanima me programiranje i racunalna tehnologija i sad me zanima ako znas mozda ili neki prijedlog kaj bi mogao upisat..prolazim sa 5 i neznam sto bi mogao upisat...gimnaziju pa recimo FER ili odmah strukovnu?

Luuka pon 7.2.2011 16:08
FiCoO kaže...

pa zanima me programiranje i racunalna tehnologija i sad me zanima ako znas mozda ili neki prijedlog kaj bi mogao upisat..prolazim sa 5 i neznam sto bi mogao upisat...gimnaziju pa recimo FER ili odmah strukovnu?

Otišli smo u offtopic, ali ako te toliko zanima onda matematička gimnazija, pa kasnije kako ćeš već htjet. Ima više faxeva sa jakim računarstvom (FER,PMF), sve ovisi o tvojim preferencijama.

Tom69 pon 7.2.2011 16:11
FiCoO kaže...

pa zanima me programiranje i racunalna tehnologija i sad me zanima ako znas mozda ili neki prijedlog kaj bi mogao upisat..prolazim sa 5 i neznam sto bi mogao upisat...gimnaziju pa recimo FER ili odmah strukovnu?

Lakši put: strukovna pa TVZ.

Teži put: gimnazija pa FER.

 

Na kraju je to tvoj život i tvoja odluka.

matej885 pon 7.2.2011 16:21

/*
 * Program ispisuje ucestalost pojavljivanja odredjenih
 * bajtova u datoteci i sortira rezultat
 *
 */

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


typedef long count_t;
typedef unsigned char byte_t;

#define BYTE_NUM 256




typedef struct {
    byte_t b;
    count_t count;
} Co;

typedef struct {
    Co dat[BYTE_NUM];
    count_t uk;
} Co_Data;



int CompareByCount(const void *lhs, const void *rhs) {
   
    if( ((Co*)lhs)->count < ((Co*)rhs)->count ) return -1;
   
    if( ((Co*)lhs)->count > ((Co*)rhs)->count ) return 1;

    return 0;
}

void Co_Data_init(Co_Data *d) {
    int i;
    d->uk=0;
    for(i=0;i!=BYTE_NUM;++i) {
        d->dat[i].b = i;
        d->dat[i].count = 0;
    }
}

void ProcessFile(FILE *src, Co_Data *d) {
    int c;
    while( (c = getc(src)) != EOF ) {
        ++d->dat[c].count;
        ++d->uk;
    }
}

void help(const char *prg) {
    printf("filestat\n");
    printf("usage:\n");
    printf("\t%s <filename> read from file filename\n",prg);
    printf("\t%s <-> read from stdin\n",prg);
}


int main(int argc, char** argv) {
    const char *filename;
    FILE *file;
    Co_Data data;

    if(argc != 2) {
        help(argv[0]);
        exit(-1);
    }

    if(argc == 2) {
        filename = argv[1];
        if(strcmp(filename,"-")) {
            file = fopen(filename, "r");
            if(!file) {
                printf("Error opening %s\n",filename);
                exit(1);
            }
        }
        else file = stdin;

        Co_Data_init(&data);
        ProcessFile(file,&data);

        qsort(data.dat, BYTE_NUM, sizeof(Co), &CompareByCount);

        printf("Byte\tCount\t\tPercent\n");
       
        int i;
        for(i=0;i!=BYTE_NUM;++i) {
            Co *c = &data.dat[i];
            printf("0x%x\t%ld\t\t%.3f%%\n",c->b, c->count,
                ((float)c->count/data.uk)*100 );
        }

    }

   

    return 0;
}

 

Zanimljivo je da izvršne datoteke npr. imaju najvise nula, tekstualne će imat najvise ASCII znakova, a slike i muzika podjednako svih vrijenosti.

 

@FiCoO uz FER i PMF imaš i odličan FESB u Splitu te ETF u Osijeku

betmen sub 12.2.2011 15:58

Evo jedan moj, možda nekome bude koristan. Radi se o programu koji računa životne bodove u igri Yu-Gi-Oh, zapravo radi sve ono što inače treba pisati po papiru, samo urednije.

 

Kod:

 

#include<iostream>
#include<conio.h>
using namespace std;


int main()
{
      system("Title Yu-Gi-Oh - Racunanje zivotnih bodova");
      int M, T, x,;
      char ime1[20], ime2[20];
      char i;

      cout << "Dobro dosli.\nOvaj program ce vam pomoci u racunanju zivotnih bodova u igri Yu-Gi-Oh.\n\n";
     
      unos: cout << "Unesite ime prvog igraca: ";         //Upis imena igrača, od tu...
      cin >> ime1;
      cout << "\nUnesite ime drugog igraca: ";
      cin >> ime2; cout << endl;                          //...do tu.

      if(ime1[0] == ime2[0])                              //Provjera imena.
      {
      system("CLS");
      cout << "Nazalost, aplikacija ne radi pravilno ako imena igraca pocinju istim slovom.";
      cout << "\nOvaj problem mozete rijesiti tako da jedan od igraca stavi neko drugo ime.\n";
      cout << "Ponoviti cemo unos imena:\n";
      goto unos;
      }
      cout << "Unesite pocetni broj zivotnih bodova: ";   //Unos zivotnih bodova.
      cin >> M; cout << endl;
      T=M;
      system("CLS");                                      //Cisti ekran.

     
      cout << "Za oduzimanje bodova igracima pritisnite '"<<ime1[0]<<"' ili '"<<ime2[0]<<"'. ";           //Upute.
      cout << "\nNpr. naredba '"<<ime2[0]<<" 300' ce oduzeti igracu "<< ime2 << " 300 zivotnih bodova. \n";
      cout << "\nZivotni bodovi:\n" << ime1 << " - " << M << ", " << ime2 << " - " << T << ".\n";
     
     
     
      do                            //Petlja koja se vrti dok broj zivotnih bodova ne iznosi 0 (ili manje).
      {
                cout << "\nDalje? ";     
                cin >> i >> x;
                system("CLS");
                if(i==ime1[0])
                {
                cout << ime1 << " gubi "<< x << " zivotnih bodova.\n\n";
                M=M-x;
                if(M<0) M=0;
                cout << "Zivotni bodovi:\n"<<ime1<<" - " << M << ", "<<ime2<<" - " << T << ".\n";
                }
                else if(i==ime2[0])
                {
                cout << ime2 <<" gubi " << x << " zivotnih bodova.\n\n";
                T=T-x;
                if(T<0) T=0;
                cout << "Zivotni bodovi:\n"<<ime1<<" - " << M << ", "<<ime2<<" - " << T << ".\n";
                }
                else
                cout << "Molimo unesite prvo slovo imena igraca.\n"<<ime1[0]<<" za igraca "<<ime1<<", a "<<ime2[0]<<" za igraca "<<ime2<<".";
      }while((M>0) && (T>0));
     
      if(M<=0)                          //Objava pobjednika.
      {M=0;
      cout << "\n"<<ime1<<" je pao na nula zivotnih bodova!\n\n"<<ime2<<" zasluzeno odnosi pobjedu!";}
      else if (T<=0)
      {T=0;
      cout << "\n"<<ime2<<" je pao na nula zivotnih bodova!\n\n"<<ime1<<" zasluzeno odnosi pobjedu!";}
        
     
     
      getch();
      return 0; 
}

 

Prihvaćam kritike i prijedloge.

FiCoO sub 12.2.2011 19:04
betmen kaže...

Evo jedan moj, možda nekome bude koristan. Radi se o programu koji računa životne bodove u igri Yu-Gi-Oh, zapravo radi sve ono što inače treba pisati po papiru, samo urednije.

 

Kod:

 

#include<iostream>
#include<conio.h>
using namespace std;


int main()
{
      system("Title Yu-Gi-Oh - Racunanje zivotnih bodova");
      int M, T, x,;
      char ime1[20], ime2[20];
      char i;

      cout << "Dobro dosli.\nOvaj program ce vam pomoci u racunanju zivotnih bodova u igri Yu-Gi-Oh.\n\n";
     
      unos: cout << "Unesite ime prvog igraca: ";         //Upis imena igrača, od tu...
      cin >> ime1;
      cout << "\nUnesite ime drugog igraca: ";
      cin >> ime2; cout << endl;                          //...do tu.

      if(ime1[0] == ime2[0])                              //Provjera imena.
      {
      system("CLS");
      cout << "Nazalost, aplikacija ne radi pravilno ako imena igraca pocinju istim slovom.";
      cout << "\nOvaj problem mozete rijesiti tako da jedan od igraca stavi neko drugo ime.\n";
      cout << "Ponoviti cemo unos imena:\n";
      goto unos;
      }
      cout << "Unesite pocetni broj zivotnih bodova: ";   //Unos zivotnih bodova.
      cin >> M; cout << endl;
      T=M;
      system("CLS");                                      //Cisti ekran.

     
      cout << "Za oduzimanje bodova igracima pritisnite '"<<ime1[0]<<"' ili '"<<ime2[0]<<"'. ";           //Upute.
      cout << "\nNpr. naredba '"<<ime2[0]<<" 300' ce oduzeti igracu "<< ime2 << " 300 zivotnih bodova. \n";
      cout << "\nZivotni bodovi:\n" << ime1 << " - " << M << ", " << ime2 << " - " << T << ".\n";
     
     
     
      do                            //Petlja koja se vrti dok broj zivotnih bodova ne iznosi 0 (ili manje).
      {
                cout << "\nDalje? ";     
                cin >> i >> x;
                system("CLS");
                if(i==ime1[0])
                {
                cout << ime1 << " gubi "<< x << " zivotnih bodova.\n\n";
                M=M-x;
                if(M<0) M=0;
                cout << "Zivotni bodovi:\n"<<ime1<<" - " << M << ", "<<ime2<<" - " << T << ".\n";
                }
                else if(i==ime2[0])
                {
                cout << ime2 <<" gubi " << x << " zivotnih bodova.\n\n";
                T=T-x;
                if(T<0) T=0;
                cout << "Zivotni bodovi:\n"<<ime1<<" - " << M << ", "<<ime2<<" - " << T << ".\n";
                }
                else
                cout << "Molimo unesite prvo slovo imena igraca.\n"<<ime1[0]<<" za igraca "<<ime1<<", a "<<ime2[0]<<" za igraca "<<ime2<<".";
      }while((M>0) && (T>0));
     
      if(M<=0)                          //Objava pobjednika.
      {M=0;
      cout << "\n"<<ime1<<" je pao na nula zivotnih bodova!\n\n"<<ime2<<" zasluzeno odnosi pobjedu!";}
      else if (T<=0)
      {T=0;
      cout << "\n"<<ime2<<" je pao na nula zivotnih bodova!\n\n"<<ime1<<" zasluzeno odnosi pobjedu!";}
        
     
     
      getch();
      return 0; 
}

 

Prihvaćam kritike i prijedloge.

kolliko imas godina?{#}

BolestanUm sub 12.2.2011 21:56

 

Programski jezik: C

Godina: 2006 (taman kad sam naučio for petlju :D)

Opis: Program ispisuje sve petke 13-e u godini koju unesete (iz 21. stoljeća i nadalje)

Način rada: Sjećam se samo da samo jedno pola sata vremena promatrao kalendar i kako se ponašaju dani iz godine u godinu i iz mjeseca u mjesec i tako našao način. :D

 

Kod:

 

 

#include<conio.h>

#include<stdio.h>

 

void main (void)

{

   unsigned int i, god, dan, m;

   int pdan, kor=0;

 

   clrscr();

   printf("Unesi godinu iz 21. stolje†a: ");

   scanf("%u", &god);

   printf("--------------------------------------------------------");

 

   for(i=2001, dan=1; i<god; i++, dan++)

   {

     if(i%4==0 && i%400!=0)

           dan+=1;

   }

   if(dan==7)

        dan=0;

   pdan=dan%7;

   if(pdan==7)

         pdan=0;

 

   for(m=1; m<=12; m++, pdan=(pdan+kor)%7)

   {

     switch(m)

     {

       case 1: if(pdan==0)

              printf("\n\n   13. sijeźnja %u.", god);

           kor=3;

       break;

       case 2: if(pdan==0)

              printf("\n\n   13. veljaźe %u.", god);

           if(god%4==0 && god%400!=0)

               kor=1;

           else

               kor=0;

       break;

       case 3: if(pdan==0)

              printf("\n\n   13. o§ujka %u.", god);

           kor=3;

       break;

       case 4: if(pdan==0)

              printf("\n\n   13. travnja %u.", god);

           kor=2;

       break;

       case 5: if(pdan==0)

              printf("\n\n   13. svibnja %u.", god);

           kor=3;

       break;

       case 6: if(pdan==0)

              printf("\n\n   13. lipnja %u.", god);

           kor=2;

       break;

       case 7: if(pdan==0)

              printf("\n\n   13. srpnja %u.", god);

           kor=3;

       break;

       case 8: if(pdan==0)

              printf("\n\n   13. kolovoza %u.", god);

           kor=3;

       break;

       case 9: if(pdan==0)

              printf("\n\n   13. rujna %u.", god);

           kor=2;

       break;

       case 10: if(pdan==0)

              printf("\n\n   13. listopada %u.", god);

            kor=3;

       break;

       case 11: if(pdan==0)

              printf("\n\n   13. studenog %u.", god);

            kor=2;

       break;

       case 12: if(pdan==0)

              printf("\n\n   13. prosinca %u.", god);

            kor=3;

       break;

 

     }

   }

   getch();

}

 

mbaksa ned 13.2.2011 01:31
BolestanUm kaže...

 

   for(m=1; m<=12; m++, pdan=(pdan+kor)%7)

   {

     switch(m)

     {

       case 1: if(pdan==0)

              printf("\n\n   13. sijeźnja %u.", god);

           kor=3;

       break;

       case 2: if(pdan==0)

              printf("\n\n   13. veljaźe %u.", god);

           if(god%4==0 && god%400!=0)

               kor=1;

           else

               kor=0;

       break;

       case 3: if(pdan==0)

              printf("\n\n   13. o§ujka %u.", god);

           kor=3;

       break;

       case 4: if(pdan==0)

              printf("\n\n   13. travnja %u.", god);

           kor=2;

       break;

       case 5: if(pdan==0)

              printf("\n\n   13. svibnja %u.", god);

           kor=3;

       break;

       case 6: if(pdan==0)

              printf("\n\n   13. lipnja %u.", god);

           kor=2;

       break;

       case 7: if(pdan==0)

              printf("\n\n   13. srpnja %u.", god);

           kor=3;

       break;

       case 8: if(pdan==0)

              printf("\n\n   13. kolovoza %u.", god);

           kor=3;

       break;

       case 9: if(pdan==0)

              printf("\n\n   13. rujna %u.", god);

           kor=2;

       break;

       case 10: if(pdan==0)

              printf("\n\n   13. listopada %u.", god);

            kor=3;

       break;

       case 11: if(pdan==0)

              printf("\n\n   13. studenog %u.", god);

            kor=2;

       break;

       case 12: if(pdan==0)

              printf("\n\n   13. prosinca %u.", god);

            kor=3;

       break;

 

     }

   }

   getch();

}

 

 

Jao, kako mene ta zalihost bode u oko... Nije mi jasno zašto se switch tako često tako pogrešno koristi. Naime, iz tvog koda je očito da za svaki slučaj u switchu ispituješ identičan uvjet i ispisuješ naredbu kojoj "parametar" (mjesec) ovisi o vrijednosti koju switchas. Znači, tu postoji jasno vidljiva veza, stoga je taj uvjet i printf trebalo izvaditi van iz switcha. I kad se to napravi, postaje očito da se ova dodijeljivanja vrijednosti varijabli kod mogu grupirati. Dakle, ta for-petlja je trebala izgledati ovako:

 

      char mjeseci [12][10] = { "sijecnja", "veljace", "ozujka", "travnja", "svibnja", "lipnja", "srpnja", "kolovoza", "rujna", "listopada", "studenog", "prosinca" };
 
      if (pdan==0) printf("\n\n   13. %s %u.", mjeseci[m-1], god);

      switch (m) {
         case 2:  kor = (god%4==0 && god%400!=0) ? 1 : 0; break;
         case 4:
           case 6:
           case 9:
           case 11: kor=2; break;
         default: kor=3;
      } 

 

I to je to!

mbaksa ned 13.2.2011 01:45
betmen kaže...

      unos: cout << "Unesite ime prvog igraca: ";         //Upis imena igrača, od tu...
      ...
      goto unos;

 

Prihvaćam kritike i prijedloge.

Ti si prvo učio BASIC, zar ne? Korištenje naredbe goto bez nekog posebnog razloga nije preporučljivo. Kad si zadnji put vidio da je netko napisao program uz korištenje naredbe goto? Recimo ovdje na forumu? To se jednostavno ne radi. Napraviš petlju iz koje se izlazi kad su zadovoljeni svi uvjeti, a ne da ručno skačeš prema početku programa kad skužiš da uvjeti nisu zadovoljeni.

BolestanUm ned 13.2.2011 02:21

Hahah, samo sam čeka kad ce neko citirat. je u pravu si potpuno. Al ovo sam napisao nakon nekih 2 mjeseca mojih početaka programiranja još u srednjoj. Znaci praktički nisam bio spreman baratati s matricama itd. zato je takav kod kakav je. Samo sam ga sada copy- paste :D 

betmen ned 13.2.2011 17:40
FiCoO kaže...

kolliko imas godina?{#}

18, zašto pitaš?

mbaksa kaže...
betmen kaže...

      unos: cout << "Unesite ime prvog igraca: ";         //Upis imena igrača, od tu...
      ...
      goto unos;

 

Prihvaćam kritike i prijedloge.

Ti si prvo učio BASIC, zar ne? Korištenje naredbe goto bez nekog posebnog razloga nije preporučljivo. Kad si zadnji put vidio da je netko napisao program uz korištenje naredbe goto? Recimo ovdje na forumu? To se jednostavno ne radi. Napraviš petlju iz koje se izlazi kad su zadovoljeni svi uvjeti, a ne da ručno skačeš prema početku programa kad skužiš da uvjeti nisu zadovoljeni.

Ne! :)

 

C++ mi je prvi (i zasad jedini) programski jezik.


A što se tiče goto naredbe - znam da je svi pravi programeri izbjegavaju, to piše i u knjizi iz koje trenutno učim. Ali tamo i piše ovo: "Ako naredba goto može pomoći da program bude čitljiviji, nema razloga da se ona ne upotrijebi." Zato sam je ubacio...

 

A zašto se goto toliko izbjegava? Može neki link ili nešto?

mbaksa ned 13.2.2011 17:46
betmen kaže...
A što se tiče goto naredbe - znam da je svi pravi programeri izbjegavaju, to piše i u knjizi iz koje trenutno učim. Ali tamo i piše ovo: "Ako naredba goto može pomoći da program bude čitljiviji, nema razloga da se ona ne upotrijebi." Zato sam je ubacio...

Pogrešno si pokopčao stvari. Zbog goto naredbe tvoj program nije čitljiviji - upravo suprotno - tu se izgubila hijerarhijska struktura i kad dođeš do naredbe goto, onda ideš po kodu tražit gdje si stavio oznaku na koju će program skočiti.

 

betmen kaže...

A zašto se goto toliko izbjegava? Može neki link ili nešto?

Zato jer ruši strukturu programa. Od jedne goto naredbe u funkciji nije nitko poginuo, ali naredba do naredbe i imaš kaos. Zato je bolje uopće je ne koristiti. Osim ako za to zaista imaš opravdan razlog. Ti ga u onom programu nisi imao. Ajde pokušaj sad taj program srediti tako da nema goto naredbu.

 

 

http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html

 

Private ned 13.2.2011 19:02

...goto naredba je čista katastrofa ,najradije bih da je nema ali eto još uvijek ima knjiga i autora koji to potiču...šteta ,naravno ovo je moje mišljenje jer par puta mi je takav nered napravila da je čitav dio koda koji  nije malen trebao biti pisan ispočetka ,tko to ne doživi taj će koristiti goto zmijurinu !

rustweaver ned 13.2.2011 19:14
betmen kaže...
A zašto se goto toliko izbjegava? Može neki link ili nešto?

Tesko je ovako objasniti dok se ne opeces pa sam vidis :D

 

Ja s vremena na vrijeme radim u assembleru gdje za uvjetno grananje mozes koristiti samo kojekakve jump instrukcije koje funkcioniraju kao goto, i kad se stvari zakompliciraju postaje stvarno tesko pratiti sve te skokove po kôdu.

 

Ako stvarno zelis shvatiti zasto je goto los, probaj napisati neki malo kompliciraniji kôd koji koristi samo goto...

 

tipa:

if (nesto) goto blabla;

else goto lolololo;

IRebic ned 13.2.2011 19:22
FiCoO kaže...
betmen kaže...

Evo jedan moj, možda nekome bude koristan. Radi se o programu koji računa životne bodove u igri Yu-Gi-Oh, zapravo radi sve ono što inače treba pisati po papiru, samo urednije.

 

Kod:

 

... 

Prihvaćam kritike i prijedloge.

kolliko imas godina?{#}

 Dobar je program, a godine nisu bitne...

svaka čast