C/C++

  • Креатор на темата Креатор на темата Драган
  • Време на започнување Време на започнување
Ако може помош за рекурзивна функција за барање на НЗС на два броја.
Јас би ја напишал вака без рекурзија, со циклус, ама ми треба со рекурзија.

Код:
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;
    } 
}
 
Ако може помош за рекурзивна функција за барање на НЗС на два броја.
Јас би ја напишал вака без рекурзија, со циклус, ама ми треба со рекурзија.

Код:
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);}    
     }
}
 
Код:
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
 
Ако може помош за рекурзивна функција за барање на НЗС на два броја.
Јас би ја напишал вака без рекурзија, со циклус, ама ми треба со рекурзија.
Код:
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 код.
 
да се напише програма која за внесени 2 броја ке проверува дали вториот број е подброј на првиот број. Притоа бр Б е подброј на А ако сите цифри на Б се содржат ви А по соодветниот редослед и без прекини на пр. 432 е подброј на 54321 но не е подброј на 543621. проверката за подброј да се реализира со рекурзивна функција
 
да се напише програма која за внесени 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);
}
    
}
 
^ Фала и од мене друже, ја чачкав пред некој ден, ама не дојдов до решение.:)

П.С. После зеленко да ти дадам.:)
 
Повелете :)

Код:
#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);
}
    
}

фалааааа
 
Повелете :)

Код:
#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);
}
    
}
А работи програмава?? :)
 
Код:
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.

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

Во случајот прво се внесува 54321 а потоа 432.

Ок ?
Внесуваш забуни младичу :) Ок е.
 


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

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

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

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

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

Kajgana Shop

Back
На врв Bottom