[C] Estructuras

Iniciado por yuna88, 15 Marzo 2014, 16:45 PM

0 Miembros y 1 Visitante están viendo este tema.

yuna88

¡Hola, buenas tardes!

Ando un poco liada con el tema de las estructuras y me gustaría que me echarais una mano ¡porque me estoy volviendo loca! :(

Tengo el siguiente problema y no se bien bien cómo plantearlo:
Cread un tipo de dato Coordenada (usad typedef) que permita almacenar las componentes x e y de un punto en el espacio bidimensional.
Haz un programa que lea las coordenadas de dos puntos y nos devuelva  la distancia en línea recta entre ellos. Recordad que...



La función que hace la raíz cuadrada es sqrt que pertenece a la librería math.h Pero no se cómo poner semejante fórmula :S

Pienso que habría que hacer algo similar a esto:

typedef struct coord Coordenada;
Coordenada inicio, destino;
destino.x=12;
destino.y=10;


Pero ando muy pez en el tema y no se cómo seguir. Por ello, os pido vuestra valiosa ayuda.

Muchas gracias por vuestro esfuerzo.

Un saludo :-*

rir3760

Obtienes los dos puntos de alguna forma, a continuacion obtienes la hipotenusa del triangulo rectangulo con:
hipotenusa = sqrt(x * x + y * y);

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

El Benjo

No estabas lejos de la realidad pero lo que debes hacer primero es declarar la estructura de la forma:

Código (cpp) [Seleccionar]
struct Coordenada{
  int X;
  int Y;
}


Recuerda que el "typedef" sólo te sirve para que cuando declares las variables de un tipo de estructura no tengas que declararlas usando "struct" al inicio de la declaración y simplemente puedas hacer:

Código (cpp) [Seleccionar]
Coordenada inicio, destino;
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

yuna88

Hola, buenos días,

Llevo un buen rato dándole vueltas al problema y no me sale bien :( Os pongo el código que llevo echo hasta ahora:

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

int main()
{
     struct coordenada{
     int x;
     int y;
    } coordenada;
   
    typedef struct coordenada inicio;
    typedef struct coordenada destino;
   
printf("Introduce la coordenada x1: \n");
scanf("%d",&inicio.x);
fflush(stdin);
printf("Introduce la coordenada y1: \n");
scanf("%d",&inicio.y);
fflush(stdin);
printf("Introduce la coordenada x2: \n");
scanf("%d",&destino.x);
fflush(stdin);
printf("Introduce la coordenada y2: \n");
scanf("%d",&destino.y);
fflush(stdin);


system("PAUSE");
return 0;
}


Espero que me podáis ayudar.

Un saludo  :-*

amchacon

Pero si solo has leído los datos :huh:

La formula ya te la escribieron unas líneas atrás...
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

yuna88

Cita de: amchacon en 16 Marzo 2014, 14:07 PM
Pero si solo has leído los datos :huh:

La formula ya te la escribieron unas líneas atrás...

El problema es que en cada línea printf, me sale el siguente error al compilar: [Error] expected expression before 'inicio'

Por eso, no puedo continuar.

Un saludo  :-*

rir3760

Los errores que mencionas se generan porque tratas de utilizar los alias (solo necesitas uno) como si fueran nombres de variables.

Debe ser:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

/* 1) Se declara el tipo y su nombre alternativo (alias) */
struct coordenada {
   int x;
   int y;
};
typedef struct coordenada coord;

int main(void)
{
   /* 2) Se declaran las variables necesarias */
   coord a;
   coord b;
   
   /* 3) Lectura de datos */
   puts("Introduce la coordenada x1:");
   scanf("%d", &a.x);
   puts("Introduce la coordenada y1:");
   scanf("%d", &a.y);
   
   puts("Introduce la coordenada x2:");
   scanf("%d", &b.x);
   puts("Introduce la coordenada y2:");
   scanf("%d", &b.y);
   
   /* Calculo de la hipotenusa */
   
   return EXIT_SUCCESS;
}


Y si vas a imprimir en la salida estándar una cadena literal terminada en '\n' utiliza la función puts en lugar de printf. Por ultimo evita el uso de fflush(stdin), las razones de ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language