C/C++

Член од
16 февруари 2006
Мислења
459
Поени од реакции
48
Дечки барам некој да ми ја објасни рекурзијата на следнава задача .

Од тастатура се внесуваат 3 природни броеви од кои првите 2 се за опсег.
Програмата треба да го најде и да го испечати Н.З.С. (најголемиот заеднички
содржател) на третиот број со секој од броевите од зададениот опсег.
Одредувањето на Н.З.С. на броевите да се реализира со рекурзивна функција.
Код:
#include<stdio.h>

int nzs(int m, int n,int k);
int main()
{
int a,b,i,broj;
printf("Vnesi opseg: ");
scanf("%d %d", &a, &b);
printf("Vnesi broj: ");
scanf("%d", &broj);
for (i=a;i<=b;i++)
{
printf("NZS na %d i %d e %d.\n",broj,i,nzs(broj,i,broj));
}
system("pause");
return 0;
}
int nzs(int m,int n,int k)
{ 
if (m%n==0) return m;
return nzs(m+k,n,k);
}
Значи програмата си работи све како што треба , но не ми е јасна рекурзијата ... ако се смилува некој нека ми ја објасни , и некој друг пример за да сватам зашо ептен мака мачам со рекурзијава :toe:

Благодариме однапред :)
 

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
Долниов ред, ако m%n = 0 ја враќа вредноста на „m“ (НЗС)
Код:
if (m%n==0) return m;
Долниов ред, функцијата се повторува, меѓутоа сега вредноста m = m+k и со секое повторување „m“ се зголемува за „k“ се додека m%n != 0, кога m%n=0 тоа значи дека е пронајден НЗС и ќе ја врати таа вредност.
Код:
return nzs(m+k,n,k);
Мислам дека вака бев јасен. :)

П.С. Истата функција со помалце код можеш вака да ја пишеш:

Код:
return m%n!=0?nzs(m+k,n,k):0; // Мислам дека и вака ќе работи.
 

Песимист

Добро информиран оптимист
Член од
11 ноември 2008
Мислења
1.676
Поени од реакции
181
Вака не знам кај да го поставам прашањето (барањето) патука да видам ако има некој да ми даде материјали од 2 колоквиум програмирање 1 година од било кој факултет мислам дека е функции ,матрици,низи такво ниешто тои треба ми ногу.Фала:smir:
 

Xak

Член од
23 декември 2007
Мислења
2.610
Поени од реакции
464
Сакам да почнам да ја учам основата на програмскиот јазик како и од кај да почнам совети??:toe:
Види некоја страна поназад хостував еден фајл со кодови и задачи од факултет што сум решавал така да имаш од наједноставни па до малце по комплицирани (предметот е Основи на програмирање С++), би требало да ти биде таман за почеток.
 
Член од
25 мај 2008
Мислења
547
Поени од реакции
14
Дали некој ќе може да ми прати линк од каде да симнам C и C++ фала однапред :)
 
Член од
14 јуни 2008
Мислења
1.369
Поени од реакции
1.075
Ај некој ако може да ми ги објасни функцииве на кратко со коментари до нив :

Код:
void removeTrail(char *str)
{
int i;
i=strlen(str);
for(i--;i>=0 && isspace(str[i]);i--)
{
}
str[i+1]='\0';
}
Код:
int broiZnak(char *str,char znak)
{
int brojac=0;
while(*str!='\0')
{
brojac+=(*str==znak);
str++;}
return brojac;
}
Код:
void strDelete(char *str,int poz,int dolz)
{
char *s=str+poz+dolz-1,*d=str+poz;
int len=strlen(str);
for(;*s && ((poz+dolz)<len);*d++=*s++);
*d=0;
}
Код:
void promeniString(char *str)
{
int i=0,j=0;
while(str[i]!='\0')
{
if(!(isdigit(str[i])))
{
if(islower(str[i])) str[j]=toupper(str[i]);
else if(isupper(str[i])) str[j]=tolower(str[i]);
else str[j]=str[i];
j++;
}
i++;
}
str[j]='\0';
}
 
Член од
13 јуни 2008
Мислења
92
Поени од реакции
0
Aj ako може некој да ми даде нешто за Потпрограми во C++.. aко има некој нешто ве молам пишете ми ПП или на профилот
 
Член од
4 декември 2008
Мислења
28
Поени од реакции
13
Ве молам помогнете ми.
Имам некоја синтаксичка грешка во кодов, ако некој знае како да ја поправам нека пиши.
Стварно незнам што е проблемот. :toe:


#include<stdio.h>
#include<conio.h>

void main()void
{
int i,count,flag,j;
char str[50];
flag=0;

printf("Enter a string : ");
gets(str);

count=0;
i=0;
while(str!='\0')
{ count++;
i++;
}
i=0;
j=count-1;;
while(i<j)
{
if(str!=str[j])
{
flag=1;
break;
}

i++;
j--;
}
if(flag==0)
printf("Palindrome! ");
else
printf("Not Palindrome");

}
system("PAUSE");
return 0;
}
 
Член од
14 јуни 2008
Мислења
1.369
Поени од реакции
1.075
Ве молам помогнете ми.
Имам некоја синтаксичка грешка во кодов, ако некој знае како да ја поправам нека пиши.
Стварно незнам што е проблемот. :toe:


#include<stdio.h>
#include<conio.h>

void main()void
{
int i,count,flag,j;
char str[50];
flag=0;

printf("Enter a string : ");
gets(str);

count=0;
i=0;
while(str!='\0')
{ count++;
i++;
}
i=0;
j=count-1;;
while(i<j)
{
if(str!=str[j])
{
flag=1;
break;
}

i++;
j--;
}
if(flag==0)
printf("Palindrome! ");
else
printf("Not Palindrome");

} // ovde !
system("PAUSE");
return 0;
}


Избриши ја заградата и би требало да работи :helou:
 

CroMkd

Someone
Член од
24 декември 2008
Мислења
114
Поени од реакции
35
Ве молам помогнете ми.
Имам некоја синтаксичка грешка во кодов, ако некој знае како да ја поправам нека пиши.
Стварно незнам што е проблемот. :toe:


#include<stdio.h>
#include<conio.h>

void main()void
{
int i,count,flag,j;
char str[50];
flag=0;

printf("Enter a string : ");
gets(str);

count=0;
i=0;
while(str!='\0')
{ count++;
i++;
}
i=0;
j=count-1;;
while(i<j)
{
if(str!=str[j])
{
flag=1;
break;
}

i++;
j--;
}
if(flag==0)
printf("Palindrome! ");
else
printf("Not Palindrome");

}
system("PAUSE");
return 0;
}


Еве ти :)

Код:
#include<stdio.h>
#include<conio.h>

int main()
{
	int i,count,flag,j;
	char str[50];
	flag=0;
	
	printf("Enter a string : ");
	gets(str);

	count=0;
	i=0;
	while(str[i]!='\0')
	{
		count++;
		i++;
	}
	i=0;
	j=count-1;;
	while(i<j)
	{
		if(str[i]!=str[j])
		{
			flag=1;
			break;
		}

		i++;
		j--;
	}
	if(flag==0)
		printf("Palindrome!\n");
	else
	{
		printf("Not Palindrome\n");
	}
	system("PAUSE"); 
	return 0;
}
 

bowl

.
Член од
30 јануари 2007
Мислења
8.344
Поени од реакции
1.307
Да се најдат сите природни броеви помали од дадениот природен број n внесен преку тастатура, кои се палиндроми.

Палиндром е број кој се чита исто и одназад нанапред, како и однапред наназад.

Со for циклус иде ова ?
 

Kajgana Shop

На врв Bottom