C/C++

Spaski

Vita - Amore - Riso
Член од
31 јануари 2009
Мислења
263
Поени од реакции
11
Ако може помош за рекурзивна функција за барање на НЗС на два броја.
Јас би ја напишал вака без рекурзија, со циклус, ама ми треба со рекурзија.

Код:
int nzs(int x, int y)
{
    if(x<0) x=-x;
    if(y<0) y=-y;
    int i;
    for(i=1;;i++)
    {
        if(i%x==0 && i%y==0)
        return i;
    } 
}
 
A

apidrone

Гостин
Ако може помош за рекурзивна функција за барање на НЗС на два броја.
Јас би ја напишал вака без рекурзија, со циклус, ама ми треба со рекурзија.
Код:
int nzs(int x,int y)
{ if(x==y)return x;
  if(x>y)
    {if(x%y==0)return x;
     else {x++;nzs(x,y);}
     }    
  if(y>x)
    {if(y%x==0)return y;
     else {y++;nzs(x,y);}    
     }
}
 

Spaski

Vita - Amore - Riso
Член од
31 јануари 2009
Мислења
263
Поени од реакции
11
Код:
int nzs(int x,int y)
{ if(x==y)return x;
  if(x>y)
    {if(x%y==0)return x;
     else {x++;nzs(x,y);}
     }    
  if(y>x)
    {if(y%x==0)return y;
     else {y++;nzs(x,y);}    
     }
}
Чекај, па ова нема да го врати првото x деливо со y?
го компајлирав и враќа вредност 8

--- надополнето ---

Т.е. Го гомпајлирав со вредности 12 и 8 и враќа вредност 8
 

old_School_mk

Програмер, гејмер, psy-trance уживател
Член од
11 август 2009
Мислења
6.152
Поени од реакции
5.918
Ако може помош за рекурзивна функција за барање на НЗС на два броја.
Јас би ја напишал вака без рекурзија, со циклус, ама ми треба со рекурзија.
Код:
int nzd(int a, int b) 
{  
   return (b!=0 ? nzd(b, a%b) : a);  
}  
  
int nzs(int a, int b) 
{  
   return (a*b)/nzd(a,b);  
}
Зошто е така, не е битно :)
Тоа нзд-то ако не го разбираш, еве малку појасен код:
Код:
int nzd(int a, int b) 
{
    if(b==0) 
        return a;
    else 
        return nzd(b, a%b);
}


--- надополнето ---

Ми треба голема помош. Ќе може ли некој да ја открие и корегира грешката во задачава?
Да се напише функција kreirajNanizanoLeksi() која како аргумент прима низа од цели броеви и колку броеви има вкупно низата. Функцијата враќа покажувач кон водач на инордер нанижано бинарно лексикографско стебло. За водачот се алоцира меморија во самата функција. Доколку некои вредности од низата се појават повеќе од еднаш дупликатите се игнорираат. Потоа да се напише функција inorderNizano() која го изминува истото дрво и ги печати вредностите на info полињата.
Код:
#include <stdio.h>
#include <stdlib.h>

#define MAX_ELEMENTI 100
#define NEW(t) (t *)malloc(sizeof(t))

typedef struct element2 { 
	int info;
	struct element2 *left, *right;
	char rtag, ltag;
} nanizano;

int main()
{
	nanizano *v, *kreirajNizanoLeksi(int[], int);
	int i = 0, n, niza[MAX_ELEMENTI], scanOK;
	void inorderNanizano (nanizano *);
	while((i<MAX_ELEMENTI)&&((scanOK=(scanf("%d",&n)))||1)&&(getchar()!='`'))
	if(scanOK) niza[i++]=n;
	v = kreirajNizanoLeksi(niza, i);
	printf("\nInorder nanizano:\n");
	inorderNanizano(v);
	system("pause");
	return 0;
}

nanizano *sledbenik (nanizano *t)
{
	if(t->rtag=='+')
	{
		t=t->right;
		while(t->ltag=='+')
			t=t->left;
		return t;
	}
	else return t->right;
}

void inorderNanizano (nanizano *v)
{
	nanizano *temp=v->right;
	while(temp->ltag=='+')
		temp=temp->left;
	while(temp!=v)
	{
		printf("%d ", temp->info);
		temp=sledbenik(temp);
	}
}

void insert (nanizano **n, int x)
{
	nanizano *p=NEW(nanizano);
	nanizano *temp=(*n)->right;
	for(;;)
	{
		if(temp==NULL)
		{
			p->info=x;
			p->right=*n;
			p->rtag='-';
			p->left=*n;
			p->ltag='-';
			break;
		}
		else if(x<temp->info)
		{
			if(temp->ltag!='-')
				temp=temp->left;
			else
			{
				p->info=x;
				p->right=temp;
				p->rtag='-';
				p->left=temp->left;
				p->ltag=temp->ltag;
				temp->left=p;
				temp->ltag='+';
				break;
			}
		}
		else if(x>temp->info)
		{
			if(temp->rtag!='-')
				temp=temp->right;
			else
			{
				p->info=x;
				p->right=temp->right;
				p->rtag=temp->rtag;
				p->left=temp;
				p->ltag='-';
				temp->right=p;
				temp->rtag='+';
				break;
			}
		}
		else break;
	}
}

nanizano *kreirajNizanoLeksi (int a[], int n)
{
	nanizano *v=NEW(nanizano);
	v->right=NULL;
	v->rtag='+';
	v->left=v;
	v->ltag='-';
	for(int i=0; i<n; i++)
		insert(&v, a[i]);
	return v;
}
Еве и paste2.org код.
 
Член од
12 мај 2007
Мислења
32
Поени од реакции
1
да се напише програма која за внесени 2 броја ке проверува дали вториот број е подброј на првиот број. Притоа бр Б е подброј на А ако сите цифри на Б се содржат ви А по соодветниот редослед и без прекини на пр. 432 е подброј на 54321 но не е подброј на 543621. проверката за подброј да се реализира со рекурзивна функција
 
Член од
4 декември 2010
Мислења
18
Поени од реакции
4
да се напише програма која за внесени 2 броја ке проверува дали вториот број е подброј на првиот број. Притоа бр Б е подброј на А ако сите цифри на Б се содржат ви А по соодветниот редослед и без прекини на пр. 432 е подброј на 54321 но не е подброј на 543621. проверката за подброј да се реализира со рекурзивна функција
Повелете :)

Код:
#include <stdio.h>
#include <stdlib.h>
int x,y;
int AvoB(int a, int b);
int main(int argc, char *argv[])
{
  scanf("%d%d",&x,&y);
  if (AvoB(x,y) == 1) printf("ok");
  else
      printf("N-OK");
  system("PAUSE");	
  return 0;
}

int AvoB(int a, int b){
    if (a == 0 && b != 0) return 0;
    if (a == 0 || b == 0) return 1;
    else
    if (a % 10 == b % 10) return AvoB(a / 10, b / 10);
    else{
    x/=10;
    return AvoB(x , y);
}
    
}
 
I

Intex

Гостин
^ Фала и од мене друже, ја чачкав пред некој ден, ама не дојдов до решение.:)

П.С. После зеленко да ти дадам.:)
 
Член од
12 мај 2007
Мислења
32
Поени од реакции
1
Повелете :)

Код:
#include <stdio.h>
#include <stdlib.h>
int x,y;
int AvoB(int a, int b);
int main(int argc, char *argv[])
{
  scanf("%d%d",&x,&y);
  if (AvoB(x,y) == 1) printf("ok");
  else
      printf("N-OK");
  system("PAUSE");	
  return 0;
}

int AvoB(int a, int b){
    if (a == 0 && b != 0) return 0;
    if (a == 0 || b == 0) return 1;
    else
    if (a % 10 == b % 10) return AvoB(a / 10, b / 10);
    else{
    x/=10;
    return AvoB(x , y);
}
    
}
фалааааа
 
A

apidrone

Гостин
Повелете :)

Код:
#include <stdio.h>
#include <stdlib.h>
int x,y;
int AvoB(int a, int b);
int main(int argc, char *argv[])
{
  scanf("%d%d",&x,&y);
  if (AvoB(x,y) == 1) printf("ok");
  else
      printf("N-OK");
  system("PAUSE");	
  return 0;
}

int AvoB(int a, int b){
    if (a == 0 && b != 0) return 0;
    if (a == 0 || b == 0) return 1;
    else
    if (a % 10 == b % 10) return AvoB(a / 10, b / 10);
    else{
    x/=10;
    return AvoB(x , y);
}
    
}
А работи програмава?? :)
 
Член од
4 декември 2010
Мислења
18
Поени од реакции
4
Код:
if (a == 0 && b != 0) return 0;
Ако за овој код внесеш 432 и 54321, очекуваш да врати 1, но b(54321) е различно од 0(!=0) па функцијата ќе врати вредност 0.
Секогаш првин се внесува бројот со повеќе цифри а потоа со помалку само што не ми е нагласено на почетокот. Треба да нагласам:
Код:
printf("Vnesete prvo A i potoa B");
scanf("%d%d",&x,&y);
Во случајот прво се внесува 54321 а потоа 432.

Ок ?
 
A

apidrone

Гостин
Секогаш првин се внесува бројот со повеќе цифри а потоа со помалку само што не ми е нагласено на почетокот. Треба да нагласам:
Код:
printf("Vnesete prvo A i potoa B");
scanf("%d%d",&x,&y);
Во случајот прво се внесува 54321 а потоа 432.

Ок ?
Внесуваш забуни младичу :) Ок е.
 
Член од
7 декември 2010
Мислења
2
Поени од реакции
0


--- надополнето ---

ПОМОШ
Ве молам решение за задачава во c++ т.е. код итно ми треба
file:///C:/Documents%20and%20Settings/kate/Desktop/zadaca.bmp

Благодарам однапред

--- надополнето ---

http://img823.imageshack.us/i/zadaca.png/
 

Kajgana Shop

На врв Bottom