Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con codigo!!!!

Estas en el tema de Ayuda con codigo!!!! en el foro de C/C++ en Foros del Web. hola, lo que pasa es que tengo el siguiente codigo: Código: #include<iostream.h> #include<conio.h> #include<stdio.h> #include<stdlib.h> int valor[4][4],i,j,nump,numip,nprim; void llenar(); void mostrar(); void diagonalp(); void diagonals(); ...
  #1 (permalink)  
Antiguo 05/08/2008, 14:09
Avatar de jesmi89  
Fecha de Ingreso: agosto-2008
Ubicación: Bello - Antioquia
Mensajes: 47
Antigüedad: 15 años, 9 meses
Puntos: 0
Exclamación Ayuda con codigo!!!!

hola, lo que pasa es que tengo el siguiente codigo:
Código:
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

int valor[4][4],i,j,nump,numip,nprim;

void llenar();
void mostrar();
void diagonalp();
void diagonals();
void menu();
void npares();
void nimpares();
void nprimos();
void salir();

void main()
{
	menu();
}

void menu()
{
	system("cls");
	int op;	
cout<<"\n\nMENU PRINCIPAL\n";
cout<<"------------------\n";
cout<<"(1) LLENAR\n";
cout<<"(2) MOSTRAR\n";
cout<<"(3) DIAGONAL PRINCIPAL\n";
cout<<"(4) DIAGONAL SECUNDARIA\n";
cout<<"(5) NUMEROS PARES\n";
cout<<"(6) NUMEROS IMPARES\n";
cout<<"(7) NUMEROS PRIMOS\n";
cout<<"(8) SALIR\n";
cout<<"Escoja una opcion:[ ]\b\b";
cin>>op;
switch (op)
{ 
case 1: llenar(); break;
case 2: mostrar (); break;
case 3: diagonalp(); break;
case 4: diagonals(); break;
case 5: npares(); break;
case 6: nimpares(); break;
case 7: nprimos(); break;
case 8: salir(); break;
}
getch();
menu();
}
	void llenar()
	{ 
		system("cls");
		cout<<"\nIngrese 16 digitos\n\n";
		for(i=0;i<=3;i++)
		{
			for(j=0;j<=3;j++)
			{
				cin>>valor [i][j];
			}

		}
	}

	void mostrar ()
	{
		system("cls");
		cout<<"\n\n\tLos datos de la Matriz son:\n";
		cout<<"\t***************************\n\n";
		for(i=0;i<=3;i++)
		{
			for(j=0;j<=3;j++)
			{
				cout<<"\t"<<valor[i][j];
			}
		cout<<endl;	
		}
	}


	void diagonalp()
	{
		system("cls");
		cout<<"\n\nlos datos en diagonal principal son:\n";
		for(i=0;i<=3;i++)
		{
			for(j=0;j<=3;j++)
			{
				if(i==j)
				{
				  cout<<"\n"<<valor[i][j];
				}
			}
		}
	}

	void diagonals()
	{
		system("cls");
		cout<<"\n\nlos datos en diagonal secundaria son:\n";
		for(i=0;i<=3;i++)
		{
			for(j=0;j<=3;j++)
			{
				if(i+j==3)
				{
					cout<<"\n"<<valor[i][j];
				
				}
			
			}
		}
	}
	
	
void npares()
	{
	system("cls");	
		cout<<"\n\nlos datos pares son:\n";
		for(i=0;i<=3;i++)
		{
			for(j=0;j<=3;j++)
			{
				nump=valor[i][j]%2;
				
				if(nump==0)
				{
					cout<<"\n"<<valor[i][j];
				}
			}
		
		
		}

	}
	void nimpares()
	{
		system("cls");
		cout<<"\n\nlos datos impares son:\n";
		for(i=0;i<=3;i++)
		{
			for(j=0;j<=3;j++)
			{
				numip=(valor[i][j]%2)-1;
				
				if(numip==0)
				{
					cout<<"\n"<<valor[i][j];
				}
			}
		
		
		}

	}

	void nprimos()
	{
		system("cls");
		cout<<"\n\nlos datos primos son:";
		for(i=0;i<=3;i++)
		{
			for(j=0;j<=3;j++)
			{
				nprim=(valor[i][j]%2)*1;
				if(nprim==1)
				{
					cout<<"\n"<<valor[i][j];
				}
			}
		
		
		}

	}

void salir()
{
exit(0);
}
y al tratar de ejecutarlo me arroja estos dos errores de compilación, que no se entiendo a que se refieren:

Linking...
kk.obj : error LNK2005: _main already defined in menu matriz.obj
Debug/menu matriz.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.


entonces quisiera saber si me pueden ayudar a identificar o a saber que significan los errores

gracias
  #2 (permalink)  
Antiguo 05/08/2008, 19:14
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Ayuda con codigo!!!!

A mi entender el error debe ser porque tienes otro archivo en el cual también hay una función main, si estás usando un entorno de programación, como Code::Blocks o Visual Studio, debes revisar que archivos tienes asociados al proyecto (que me parece son al menos dos kk y matriz):

kk.obj : error LNK2005: _main already defined in menu matriz.obj
Esa línea lo que dice es que la función main ya está definida en menu

Debug/menu matriz.exe : fatal error LNK1169: one or more multiply defined symbols found
Esta lo que dice es que uno o más símbolos están definidos múltiples veces (más o menos lo mismo que la anterior pero más general).
  #3 (permalink)  
Antiguo 06/08/2008, 08:42
Avatar de jesmi89  
Fecha de Ingreso: agosto-2008
Ubicación: Bello - Antioquia
Mensajes: 47
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Ayuda con codigo!!!!

oye gracias ya encontre el error, pero ahora el problema es que si ejecuta bien, pero tanto en la opcion de impares y primos aparecen los mismos datos.

Me podrias ayudar en eso porfa!!!
  #4 (permalink)  
Antiguo 06/08/2008, 16:42
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Ayuda con codigo!!!!

El problema está en como se define si un número es primo o no:

nprim=(valor[i][j]%2)*1; // la multiplicación por 1 no hace absolutamente nada, todo número multiplicado por 1 da ese mismo número, por lo que nprim es el resto de la división del número entre 2.
if(nprim==1) // Solo se está comprobando que el resto de la división sea igual a 1, que en el caso de un número impar siempre será así ya que el resto de una división entre 2 solo puede ser 0 ó 1, siendo 1 si el número es impar y 0 si es par.

que es lo mismo que para los impares (solo que expresado de forma diferente):

numip=(valor[i][j]%2)-1; // El resto es 0 ó 1, al restarle 1 los pares son -1 y los impares 0
if(numip==0)

El comprobar si un número es primo no es una tarea simple:
http://es.wikipedia.org/wiki/Test_de_primalidad
http://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes

Sin embargo se podría resolver de una forma simple partiendo del hecho de que los números primos son mayores que 1, que son divisibles únicamente por sí mismos y por la unidad, usando la siguiente función:

Código:
bool esprimo(int N)
{
	if(N<=1) return false; // un primo debe ser mayor que 1
	for(int divisor=N-1; divisor>1; divisor--) {
		if(N%divisor==0) return false; // Si el número es divisible entre otro menor que él ya no es primo
	}
	return true;
}
Claro que no será el método más eficiente para determinar si un número muy grande es primo, pero funcionará.

Y por supuesto habría que cambiar el if de la función nprimos:

Código:
...
	//nprim=(valor[i][j]%2)*1;
	//if(nprim==1)
	if(esprimo(valor[i][j]))
...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:41.