C/C++

  • Креатор на темата Креатор на темата Драган
  • Време на започнување Време на започнување
Дечки барам некој да ми ја објасни рекурзијата на следнава задача .

Од тастатура се внесуваат 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:

Благодариме однапред :)
 
Долниов ред, ако 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; // Мислам дека и вака ќе работи.
 
Вака не знам кај да го поставам прашањето (барањето) патука да видам ако има некој да ми даде материјали од 2 колоквиум програмирање 1 година од било кој факултет мислам дека е функции ,матрици,низи такво ниешто тои треба ми ногу.Фала:smir:
 
Сакам да почнам да ја учам основата на програмскиот јазик како и од кај да почнам совети??:toe:

Види некоја страна поназад хостував еден фајл со кодови и задачи од факултет што сум решавал така да имаш од наједноставни па до малце по комплицирани (предметот е Основи на програмирање С++), би требало да ти биде таман за почеток.
 
Дали некој ќе може да ми прати линк од каде да симнам C и C++ фала однапред :)
 
Ај некој ако може да ми ги објасни функцииве на кратко со коментари до нив :

Код:
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';
}
 
Aj ako може некој да ми даде нешто за Потпрограми во C++.. aко има некој нешто ве молам пишете ми ПП или на профилот
 
Ве молам помогнете ми.
Имам некоја синтаксичка грешка во кодов, ако некој знае како да ја поправам нека пиши.
Стварно незнам што е проблемот. :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;
}
 
Ве молам помогнете ми.
Имам некоја синтаксичка грешка во кодов, ако некој знае како да ја поправам нека пиши.
Стварно незнам што е проблемот. :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:
 
Ве молам помогнете ми.
Имам некоја синтаксичка грешка во кодов, ако некој знае како да ја поправам нека пиши.
Стварно незнам што е проблемот. :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;
}
 
Да се најдат сите природни броеви помали од дадениот природен број n внесен преку тастатура, кои се палиндроми.

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

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

Kajgana Shop

Back
На врв Bottom