C, PHP, VB, .NET

Дневникът на Филип Петров


* Функции, Глобални променливи

Публикувано на 11 октомври 2008 в раздел С/С++.

Функцията е основната програмна единица. Можем да разглеждаме функциите като логическа част от по-голяма програма. Този фрагмент може да се изпълнява многократно в различни части на програмата.

Функциите се дефинират по следият начин:

	тип_на_функцията име(входни_параметри)
	{
		оператори;
		return резултат;
	}

Типа на връщания резултат трябва да съвпада с типа на самата функция. Когато няма нужда от връщане на резултат се използва тип на функцията void.

Пример: Напишете програма, която намира по-голямото от две числа и намира най-големият им общ делител:

	#include "stdafx.h"
	#include "stdio.h"

	int max(int x, int y)
	{
		if (x>y) return x;
		else return y;
	}

	void nod(int x, int y)
	{
		while(x!=y)
		{
			if (x>y) x=x-y;
			else y=y-x;
		}
		printf("Nai-golemiat obsht delitel e: %d\n", x);
		return;
	}

	int main(int argc, char* argv[])
	{
		int a = 4, b = 6, c;
		c = max(a,b); // Функцията е операнд в израз
		printf("The bigger number is: %d\n", c);
		nod(a,b); // Функцията се извиква като оператор
		return 0;
	}

Променливите, дефинирани в тялото на функция се наричат локални променливи. Промените по тях важат само за тялото на самата функция.

Глобални са всички променливи, които са дефинирани извън тялото на функциите. Когато дадена функция промени такава променлива, то промяната се отразява навсякъде.

Пример: Напишете програма, която определя максималния елемент в масива "c" и го записва в глобалната променлива "n":

	#include "stdafx.h"
	#include "stdio.h"
	// Дефинираме макроопределение
	#define ARRSIZE 4

	// Глобална променлива
	double n = 0;

	// Функция, приемаща за параметър масив
	// и променяща глобалната променлива n
	void getmax(double c[])
	{
		n = c[0];
		for(int i=0; i<ARRSIZE; i++)
		{
			if (n<c[i]) n=c[i];
		}
		return;
	}

	int main(int argc, char* argv[])
	{
		// Размерността ще бъде взета от макроопределението
		double arr[ARRSIZE];
		for (int i=0; i<ARRSIZE; i++)
		{
			printf("Enter ellement %d: ", i);
			scanf("%lf", &arr[i]);
		}
		// Предаваме масива като параметър на функцията
		getmax(arr);
		printf("Max element is: %f\n", n);
		return 0;
	}

* Забележка: когато предавате едномерен масив като параметър на функция може да не задавате разерността му. Когато масива е двумерен или с повече размерности, то е задължително да посочим размерността на входните данни.

Всяка една функция може да извиква други функции. Възможно е и една фукция да извиква самата себе си. В такъв случай тя се нарича рекурсивна.

Задача: Напишете фукция, която преобразува малки букви в главни.

Задача: Напишете функция, която пресмята n!

Задача: Напишете функция, която пресмята дискриминантата на квадртно уравнение и връща броя на различните корени (0, 1 или 2).

Задача: Напишете функция, която определя дали подаден символен низ е IP адрес ([000-255].[000-255].[000-255].[000-255]). За улеснение при проерка на големината на числата използвайте функцията atoi от stdlib.h.

 



Добави коментар

Адресът на електронната поща няма да се публикува


*