Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - deifk

#1
Hola de nuevo!
Tengo un problema al realizar una funcion ya que nose muy bien por donde empezar, el caso es que tengo una serie de datos que he pasado de un fichero a una matriz en este caso 5x5, pero supongamos NXM. El problema que se plantea es el siguiente:

Los datos almacenados son alturas y tengo que comparar las alturas con las de los 8 vecinos, logicamente los extremos de la matriz no tienen 8 vecinos y no entran dentro del problema.

Si la altura es mayor que la de los 8 vecinos, tengo que sacar por pantalla esa altura y sus coordenadas, todo esto mediante una funcion.

Mi problema es el no saber desarrollar la funcion, no tengo muy claro las variables a utilizar, aparte de los i,j para recorrer la matriz, los valores que debo poner dentro de los for.

Siento no poner codigo pero es que no se me ocurre nada decente, puedo pegar el resto del programa si es ayuda pero creo que no tiene nada que ver.

Mi prototipo de funcion es(ya que solo imprime valores y no los devuelve):

void Muestra_montanas(float matriz [][M])
{

}

Gracias
Un saludo
#2
Saludos!
Esta semana hemos estado dando punteros en clase de programacion en c y han mandado un par de ejercicios para casa, uno de los cuales no me compila y no se porque, agradeceria que me dijeran a que se refiere el fallo del compilador tras observar el programa.

El programa trata de ordenar 3 numeros reales dados por el usuario de mayor a menor, a traves de una funcion y logicamente tengo que hacer uso de punteros.

void ordenar (float, float, float, float *, float *, float *);

#include <stdio.h>

main()

{
float a, b ,c;
float p_a, p_b, p_c;

Printf("Introduzca 3 numeros: ");
scanf("%f%f%f", &a, &b, &c);

ordenar(a, b, c, &p_a,&p_b,&p_c);
printf("Los numeros ordenados son %f>%f>%f", p_a, p_b, p_c);

}


void ordenar(float a, float b, float c, float *p_a, float *p_b,float *p_c)
{
float aux1, aux2, aux3;

if(a<b)
{
aux1=a;
*p_a=b;
*p_b=aux1;
}
if(b<c)
{
aux2=b;
*p_b=c;
*p_c=aux2;
}
if(a<b)
{
aux3=a;
*p_a=b;
*p_b=aux3;
}
}

Fallo al compilar:

/tmp/cci1exKv.o: In function `main':
ejercicio4.c:(.text+0x1a): undefined reference to `Printf'
collect2: ld devolvió el estado de salida 1

Ruego me perdonen incoherencias que puedan encontrar, soy bastante "novato" en esto, muchas gracias por su ayuda.
Un saludo


#3
Programación C/C++ / Problema del viajante
8 Noviembre 2011, 16:04 PM
Hola! por primera vez escribo en este foro para pedir ayuda sobre un programa que han mandado en clase, el problema del viajante. Para hacerlo solo dispongo de las herramientas, if-else y switch, ya que no hemos dado mas haya este año, se me ocurre formas de hacer el programa con el for y un vector, pero eso no lo puedo utilizar, asi que haber si me podeis ayudar y decirme el porque mi programa no se ejecuta correctamente.
El problema que se plantea es el siguiente, dispongo de un punto inicial, y digamos otros 3 posibles puntos, con sus respectivas coordenadas, los cuales son introducidos por el usuario. Pues bien el objetivo es que el programa saque por pantalla, el recorrido minimo (en distancia) y el numero de recorrido, para ello utilizo las variables x e y, las cuales las inicializo y supongo que la distancia t123 es la minima.

/*Problema del viajante, calculo de la distancia minima*/

#include <stdio.h>
#include <math.h>

main()

{
float x1,y1,x2,y2,x3,y3,d01,d02,d03,d12,d13,d23,d10,d20,d30,d21,d31,d32,t123,t132,t213,t231,t312,t321,x,y;

printf("Introduzca las coordenadas del punto 1: ");
scanf("%f%f", &x1, &y1);
printf("Introduzca las coordenadas del punto 2: ");
scanf("%f%f", &x2, &y2);
printf("Introduzca las coordenadas del punto 3: ");
scanf("%f%f", &x3, &y3);

d01=d10=sqrt(x1*x1+y1*y1);
d02=d20=sqrt(x2*x2+y2*y2);
d03=d30=sqrt(x3*x3+y3*y3);
d12=d21=sqrt((pow((x2-x1),2))+(pow((y2-y1),2)));
d13=d31=sqrt((pow((x3-x1),2))+(pow((y3-y1),2)));
d23=d32=sqrt((pow((x3-x2),2))+(pow((y3-y2),2)));

t123=d01+d12+d23+d30;
t132=d01+d13+d32+d20;
t213=d02+d21+d13+d30;
t231=d02+d23+d31+d10;
t312=d03+d31+d12+d20;
t321=d03+d32+d21+d10;

x=t123;
y=123;
 
if(t213<t123 && t213<t132 && t213<t231 && t213<t312 && t213<t321)
   {
    x=t213;
    y=213;
   }
else if(t132<t123 && t132<t213 && t132<t231 && t132<t312 && t132<t321)
   {
    x=t132;
    y=132;
   }
else if(t231<t123 && t231<t132 && t231<t213 && t231<t312 && t231<t321)
   {
    x=t231;
    y=231;
   }
else if(t312<t123 && t312<t132 && t312<t213 && t312<t231 && t312<t321)
   {
    x=t312;
    y=312;
   }
else if(t321<t123 && t321<t132 && t321<t213 && t321<t231 && t321<t312)
   {
    x=t321;
    y=321;
   }       
           
printf("El identificador de recorrido minimo es 0-%3.0f-0 y la distancia minima %0.4f\n", y,x);
}