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é medzerymale 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");
}