Skočiť na obsah


Programovanie v jazyku C a C#

Návody pre začiatočníkov a pokročilých



Fórum: Škôlka jazyka C
- - - - -
Fotografia

funkcia main(), ostatné funkcie v programe


Funkcie - základ

Pretože jazyk C je založený na volaní funkcií, musí obsahovať jednu základnú funkcia, ktorá sa volá vždy ako prvá.

Je to funkcia - main()

Na tejto funkcii si vysvetlíme, čo musí obsahovať každá funkcia, ktorú si sám vytvoríš.
Povedzme si, čo to vlastne funkcia je. Z matiky poznáš takýto zápis y=f(x) . Kde x je číslo, ktoré do funkcie vkladáš( vstupná premenná). V jej vnútri sa toto číslo spracuje a výstupná hodnota je číslo y.
Napr funkcia f: y=x+1. Vložíš číslo 1 a „vypadne“ ti číslo 2. Na tomto princípe sú založené aj funkcie v jazyku C.

Majú nasledujúci tvar:
Typ_výstupnej_premennej Meno_funkcie (Vstupné premenné a ich typ) 
{ 
  /* jadro funkcie kde sa spracovávajú vstupné premenné */ 
  return ( výstupná premenná); 
}
Ak nechceš aby mala funkcia nejaké vstupné alebo výstupné hodnoty tak za typ premennej napíšeš:

void

Takáto funkcia napr. napíše niečo na obrazovku ale nevracia nijaké hodnoty (return ( výstupná premenná) ;) .

Zatiaľ používajme takýto spôsob funkcie main()
int main(void) 
{ 
  jadro funkcie
  return 0; 
} 
Vidíš, že funkcii main v tomto prípade nevkladáš žiadne hodnoty. Teda nie rovno pri štarte programu. Možno že poznáš takýto spôsob zadávania údajov programu v príkazovom riadku rovno pri štarte :
arj.exe –v dokumet.txt doc.arj . V tomto prípade sú znaky za názvom programu vstupné hodnoty pre funkciu main(). Keď budeme pracovať s poliami(matematickými) tak si ukážeme ako sa to robí.
Na konci vidíš príkaz return 0; Teda vráti ako výsledok svojej činnosti číslo 0. Ale komu to vráti keď main() je hlavná funkcia? Odpoveď je: Operačnému systému. Nula znamená pre operačný systém, že všetko prebehlo v poriadku.

Pre začatím písania funkcií, musíš ich ešte deklarovať. To znamená, že povieš prekladaču, čo môže čakať za funkcie, aké budú mať parametre ale nič viac. POZOR: tu nedeklaruješ funkciu main(). Funkcie nemusíš deklarovať ak ich uvádzaš až za telom funkcie main(). Ale potom sa funkcie nemôžu volať medzi sebou navzájom.

Vo vnútri funkcii main( a aj iných) začíname deklaráciou premenných.
Potom môžu nasledovať volania funkcií, príkazov, procedúr. Teda jadro funkcie main() môžeme považovať väčšinou aj za jadro celého programu.

Zásadou dobrého programátora je písať komentáre k oblastiam zdrojového textu, ktoré nie sú zrozumiteľné na prvý pohľad.
Alebo, tebe aj budú jasné, ale mysli aj na kolegov :-)

Dobré programy napíšu čo budú robiť a čo čakajú od užívateľa. Keď ti hneď po štarte program napíše „zadaj číslo“ a nič viac k tomu, nemôžeš vedieť či si len nepýta počet sekúnd po ktorých má začať formátovať disk. Najlepšie by bolo keby si nepoužíval ani skratky, ktoré nie sú všeobecne jasné.

Teraz si všetko ukážeme na jednom reálnom programe.
/****************************************
 *
 * Druha_mocnina.c      v. 1.0
 * Vypocíta druhú mocninu zadaneho cisla
 * =====================================
 *
 * libcosenior          maj 2012
 *
 ****************************************/
 
#include <stdio.h>
 
/* deklaracia funkcie kvadrant */
int kvadrat(int cislo); /* je to to iste ako nazov samotnej funkcie, ale so stredníkom ; na konci */
 
/* funkcia main() */
int main(void)
{
  int cislo; /* deklaracia premennej cislo, typ cele cislo */
 
  system("cls"); /* vymazanie obrazovky */
 
  printf("Vypocitam druhu mocninu zadaneho cisla\n"); /* uvod */
  printf("Zadaj cele cislo: ");
  scanf("%d",&cislo); /* nacitanie hodnot */
  printf("\nJeho druha mocnina je %d\n",kvadrat(cislo)); /* kvadrant(cislo) = volanie funkcie */
 
  printf("Stlacte lubovolnu klavesu\n");
  system("pause"); /*caka na stlacenie lubovolnej klavesy*/
 
return 0;
}
 
/* samotna funkcia kvadrat */
int kvadrat(int cislo)  /* int = typ_výstupnej_premennej */
{                       /* kvadrant = meno_funkcie */
                        /* (int cislo) = typ premennej a jej deklaracia */
 
  return(cislo*cislo);  /* vracia druhu mocninu cisla typu int */
 
}
Ešte jeden zložitejší príklad:
/****************************************
 *
 * Vypocet_plochy.c      v. 1.0
 * Vypocita plochu troj a viac uholnika
 * pomocou Heronovho vzorca
 * ====================================
 *
 * libcosenior          maj 2012
 *
 ****************************************/
 
/* systemove hlavickove subory */
#include <stdio.h>
#include <math.h>   /* aby sa dala pouzit funkcia sqrt() - druha odmocnina */
 
/* globalne premenne */
int pocet;  /* premenna pouzita vo funkcii mnohouholnik() a menu_uholnik() */
 
/* uplne funkcne prototypy funkcii */
float trojuholnik(void);  /* deklarovanie funkcii na zaciatku */
void mnohouholnik(void);  /* umozni ich pouzitie v ostatnych  */
int menu_uholnik(void);   /* funkciach a funkcii main()       */
 
/* funkcia main() */
int main(void)
{
  printf("Vypocet obsahu viac uholnika sa robi tak,\n"  /* uvod */
         "že viacuholnik sa rozdeli na trojuholniky,\n"
         "obsah trojuholnikov sa vypocita na zaklade\n"
         "Heronovho vzorca.\n\n");
  mnohouholnik();  /* vola funkciu mnohouholnik() a cez nu dalsie funkcie */
  return 0;
}
 
/* definicia funkcii */
/* funkcia vypocita obsah trojuholnika */
float trojuholnik(void)
{
  float a;        /* 1. strana trojuholnika */
  float b;        /* 2. strana trojuholnika */
  float c;        /* 3. strana trojuholnika */
  float s_troj;   /* s = sucet stran trojuholnika deleno 2 */
  float ss_troj;  /* zaklad = s*(s-strana1)*(s-strana2)*(s-strana3) */
  float kuba;     /* kuba = druha odmocnina zakladu = obsah trojuholnika */
 
  printf("Zadaj 1. stranu: ");
  scanf("%f", &a);
  printf("Zadaj 2. stranu: ");
  scanf("%f", &b);
  printf("Zadaj 3. stranu: ");
  scanf("%f", &c);
 
  s_troj = (a + b + c) / 2;                                        /* s */
  ss_troj = (s_troj * (s_troj - a) * (s_troj - b) * (s_troj - c)); /* zaklad */
  kuba = (sqrt (ss_troj));                                         /* kuba */
  putchar('\n');
  return(kuba);    /* vratenie hodnoty obsahu trojuholnika do funkcie mnohouholnik() */
}
 
/* funkcia vypocita obsah trojuholnikov a spocita ich dokopy */
void mnohouholnik(void)
{
  int i;                /* premenna pre cyklus for */
  float obsah_ok = 0;   /* premenna na scitanie obsahov trojuholnokov */
  float obsah;          /* premenna na ulozenie obsahu trojuholnika */
 
  menu_uholnik();       /* volanie funkcie */
  for (i = 1; i <= pocet; i++) {    /* obsah premennej pocet vratila funkcia menu_uholnik() */
    printf("%d. trojuholnik\n", i);
    obsah = trojuholnik();  /* vlozenie hodnoty obsahu trojuholnika do premennej */
    obsah_ok += obsah;      /* spocitanie obsahov trojuholnikov dokopy */
  }
  printf("Obsah uholnika je %.2f.\n",obsah_ok); /* vypise vysledok programu */
}
 
/* funkcia vyberie typ viac uholnika */
int menu_uholnik(void)
{
  int kolko;
 
  printf("Kolkouholnik? Zadaj cislo 3, 4, 5, ... atd.\n"  /* moznost vyberu uholnika */
         "3 uholnik\n"
         "4 uholnik\n"
         "5 uholnik\n"
         "atd. ... : ");
  scanf("%d", &kolko);   /* vyber */
  pocet = kolko - 2;     /* pocet trojuholnikov vo vybratom obrazci */
  return("%d\n", pocet); /* vrati pocet trojuholnikov do funkcii mnohouholnik() */
}

funkcia a reťazce
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/* uplny funkcny prototyp funkcie */
char* retazec(char *retazec);
 
int main (void)
{
    char veta[100];
 
    printf("Zadajte nejaku vetu.\n\n");
    gets(veta);
    printf("\nZadana veta odzadu je.\n\n%s\n", retazec(veta));
    return 0;
}
 
/* vstup retazec, vystup retazec odzadu */
char* retazec(char *retazec)
{
    int i, j = -1;
    char *p_odzadu;
 
    /* dynamicka alokacia s kontrolou volnej pamati */
    if ((p_odzadu = (char *) malloc(100)) == NULL) {
        printf("Malo pamati!");
        return;
    }
    /* vlozenie znakov zo vstupneho retazca do vystupneho odzadu */
    for (i = strlen(retazec); i >= 0; i--) /* opacny cyklus */
        p_odzadu[j++] = retazec[i]; /* vlozenie odzadu po znakoch */
    p_odzadu[i] = '\0'; /* ukoncenie retazca */
 
    return (p_odzadu); /* navratova hodnota */
}
  • 0

Popis: Funkcie - základ, funkcia a reťazce
Poznámky:
Odkazy:


0 Komentárov


Najlepšie lekcie


Najnovšie pridané lekcie


Najnovšie komentáre


Najviac komentované lekcie


Najviac zobrazené lekcie


Náhodné lekcie


Na tejto stránke bolo užívateľ(ov) za posledných 30 minút

členov, návštevníkov