Riešenia


Úloha 1

Predpokladajme takéto deklarácie:

int  a, b;
int *p_a = &a , *p_b = &b;

a)  Volaním funkcie vymena(a, b); sa hodnoty skutočných parametrov (premenných a, b) nezmenia.

b)  Volaním funkcie  vymena(&a, &b); vymeníme hodnoty celočíselných premenných a, b.

c)  Volaním funkcie  vymena(&p_a, &p_b); vymeníme hodnoty dvoch pointerov p_a, p_b.


Úloha 2

V programe si všimnite, že premenné medzery a male vystupujú vo funkcii ako parametre volané odkazom.

#include <stdio.h>

int CitajRiadok(int *medzery, int *male)
{
  char c, poc = 0;

  *medzery = 0;
  *male = 0;

  while ((c = getchar()) != '\n') { 
     poc++;
     if (c == ' ') (*medzery)++;
     else if (c >= 'a' &&  c <= 'z') (*male)++;
  }

  return ((poc == 0)? 0 : 1);
}


void main(void)
{
   int medzery, male;

   while (CitajRiadok(&medzery, &male) == 1) {
     printf("V precitanom riadku bolo %d medzier"
            " a %d malych pismen\n", medzery, male);
   }
}


Úloha 3

#include <stdio.h>

typedef void (*TPf)();

void ahoj();  /* funkčné prototypy */
void cau();
void nazdar();

void main(void)
{
   TPf pozdravy[2];  /* pole pointerov na funkcie vracajúce void */
   int c;

   pozdravy[0] = ahoj;  /* inicializácia poľa adresami funkcií */
   pozdravy[1] = cau;
   pozdravy[2] = nazdar;

   c = getchar();
   
   pozdravy[c%3](); /* volanie zvolenej funkcie */
}

void ahoj() 
{
  printf("Ahoj!\n");
}

void nazdar()
{
  printf("Nazdar!\n");
}

void cau()
{
  printf("Cau!\n");
}