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

Problema de Principiante (Lenguaje C)

Estas en el tema de Problema de Principiante (Lenguaje C) en el foro de C/C++ en Foros del Web. Hola, ésta es la primera vez que escribo aquí un post, estoy aprendiendo el lenguaje C (me lo recomendaron para iniciar el camino como programador) ...
  #1 (permalink)  
Antiguo 26/12/2009, 01:05
Avatar de Gecast  
Fecha de Ingreso: diciembre-2009
Ubicación: Monterrey
Mensajes: 36
Antigüedad: 14 años, 4 meses
Puntos: 7
Problema de Principiante (Lenguaje C)

Hola, ésta es la primera vez que escribo aquí un post, estoy aprendiendo el lenguaje C (me lo recomendaron para iniciar el camino como programador) y pues jaja, ya me encontre una fallita.

Mi IDE es el Dev-C++ 4.9, el problema que tengo es basado en este código:

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<math.h>
  3.  
  4. /* Perimetro del triangulo.
  5. El programa, al recibir las coordenadas de los puntos P1, P2 Y P3
  6. que corresponden a los vertices de un triangulo, calcula su perimetro.
  7.  
  8. x1, x2, x3, y1, y2, y3, la1, la2, la3 y per son variables de tipo real*/
  9.  
  10. void main(void)
  11. {
  12.      float x1, x2, x3, y1, y2, y3, la1, la2, la3, per;
  13.      printf("Ingrese la coordenada de P1 (x,y):\n");
  14.      scanf("%f %f", &x1, &y1);
  15.      printf("Ingrese la coordenada de P2 (x,y):\n");
  16.      scanf("%f %f", &x2, &y2);
  17.      printf("Ingrese la coordenada de P3 (x,y):\n");
  18.      scanf("%f %f", &x3, &y3);
  19.      la1 = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
  20.      la2 = sqrt(pow(x2 - x3, 2) + pow(y2 - y3, 2));
  21.      la3 = sqrt(pow(x3 - x1, 2) + pow(y3 - y1, 2));
  22.      printf("\nValor de Lado 1: %4.2f", la1);
  23.      printf("\nValor de Lado 2: %4.2f", la2);
  24.      printf("\nValor de Lado 3: %4.2f", la3);
  25.      per = la1 + la2 + la3;
  26.      printf("\nEl perimetro del triángulo es: %6.3f", per);
  27.      getch();
  28. }

Mi duda es que puedo poner los datos (las x's y y's) pero el programa al calcular me da que los lados son iguales a cero. ¿Por qué sucede eso?

De paso, otras dos preguntas más.

1. ¿Cómo puedo saber que está librería de math.h está incluida?
2. Me aparecen estos dos mensajes al correr el programa como advertencia:
"In function `main':
"[Warning] return type of 'main' is not `int' "
  #2 (permalink)  
Antiguo 26/12/2009, 03:32
 
Fecha de Ingreso: abril-2008
Mensajes: 141
Antigüedad: 16 años
Puntos: 0
De acuerdo Respuesta: Problema de Principiante (Lenguaje C)

Dentro de los scanf solo puedes leer una variable ya que solo lee hasta que encuentra un espacio, tabulador o salto de linea.

Primero lee la coordenada X y luego la Y.

Respecto a la pregunta 1, ni idea. Las librerías por defecto no estan incluidas, pero en mi universidad ddeben haber hecho algo porque librerias como stdio.h ya vienen incluidas. Que te responda otra persona mejor .

Y la pregunta 2. Pon:
Código C:
Ver original
  1. int main (){
  2.      ...
  3.      return 0;
  4. }
  #3 (permalink)  
Antiguo 29/12/2009, 03:14
Avatar de Gecast  
Fecha de Ingreso: diciembre-2009
Ubicación: Monterrey
Mensajes: 36
Antigüedad: 14 años, 4 meses
Puntos: 7
Respuesta: Problema de Principiante (Lenguaje C)

Gracias por responderme hasta donde sabes jaja. Tengo curiosidad ¿Por qué tiene que ser de esa manera? Ya que estoy utilizando un libro de texto Piensa en C de Osvaldo Cairó y viene de la manera que antes escribí.

Agradezco la atención.
  #4 (permalink)  
Antiguo 05/01/2010, 15:22
Avatar de Gecast  
Fecha de Ingreso: diciembre-2009
Ubicación: Monterrey
Mensajes: 36
Antigüedad: 14 años, 4 meses
Puntos: 7
Respuesta: Problema de Principiante (Lenguaje C)

Aquí vengo con otra duda nuevamente. El código a continuación:

Código C:
Ver original
  1. #include<stdio.h>
  2.  
  3. /* Problema PS1.10
  4. Escribe un programa en C que, al recibir como dato un número de cuatro digitos
  5. genere una impresión como la que se muestra a continuación (el número 6352).
  6. 6
  7. 3
  8. 5
  9. 2*/

Como ven, eso es lo que se me pide en un ejercicio, tengo la idea de como hacer el algortimo (sea leyendo el primer, segundo, tercer y cuarto carácter, acomodándolos en su renglón correspondiente) mas no sé como expresar esa orden en C ¿Alguien me podría ayudar?

Y una cosa más: Me han dicho que para evitar que la ventana se cierre automáticamente puede utilizarse "return 0;" y "getch()". El getch() ya note que si lo detiene pero no sé si esa sea su función, respecto a return 0 ¿para qué sirve?

Gracias.
  #5 (permalink)  
Antiguo 05/01/2010, 16:45
 
Fecha de Ingreso: abril-2008
Mensajes: 141
Antigüedad: 16 años
Puntos: 0
De acuerdo Respuesta: Problema de Principiante (Lenguaje C)

Eso lo puedes hacer usando el modulo (%). Por ejemplo, para obtener el 2 de 6352 solo tienes que hacer 6352%10. Ahora solo te queda mostrar los digitos. Si te han enseñado recursividad es facil, pero sino, tienes que usar tu imaginacion para mostrarlo 6-5-3-2 en lugar de 2-3-5-6.

El getch es como un scanf de un caracter pero que no te guarda en ninguna variable ese caracter, simplemente se espera a que presiones alguna tecla.

El return 0 que te puse es porque el main devuelve un int. Normalmente se le pone que devuelva un 0, pero puedes ponerle -1 o 69 sin ningun problema. El retorno se usa cuando trabajas comunicando procesos.

Última edición por GagleKas; 05/01/2010 a las 16:54
  #6 (permalink)  
Antiguo 09/01/2010, 04:50
Avatar de Gecast  
Fecha de Ingreso: diciembre-2009
Ubicación: Monterrey
Mensajes: 36
Antigüedad: 14 años, 4 meses
Puntos: 7
Respuesta: Problema de Principiante (Lenguaje C)

Muchas gracias por la ayuda GagleKas, si logré hacer ese problema (aunque ya no recuerdo muy bien como lo hice jaja, pero logré razonarlo).
  #7 (permalink)  
Antiguo 10/01/2010, 11:27
Avatar de Gecast  
Fecha de Ingreso: diciembre-2009
Ubicación: Monterrey
Mensajes: 36
Antigüedad: 14 años, 4 meses
Puntos: 7
Respuesta: Problema de Principiante (Lenguaje C)

Aquí una nueva duda, va el código:
Código C:
Ver original
  1. #include<stdio.h>
  2.  
  3. /* Problema PR2.2
  4. Construye un diagrama de flujo y el correspondiente programa en C que, al
  5. recibir como dato un número entero, determine e imprime si el mismo es par,
  6. impar o nulo.
  7.  
  8. Dato: num (variable entera que representa el número que se ingresa).*/
  9.  
  10. void main(void)
  11. {
  12.      int num;
  13.      float res;
  14.      printf("Bienvenido\nIngrese un número, el sist. mostrara si es par, non o nulo: ");
  15.      scanf("%d", &num);
  16.      if(num == 0)
  17.          printf("\nEs nulo");
  18.      else
  19. /*          num % 2 = res;   */
  20.      if (res != 0)
  21.          printf("\nEs impar");
  22.      else
  23.          printf("\nEs par");
  24.      getch();
  25. }

La complicación es en la parte que está como /* comentario */ (Línea 19). En Dev C no me permite compilarlo y me aparece el mensaje "invalid lvalue in assignment". No comprendo a que se refiera y si estoy cometiendo un error.

Gracias por la ayuda.
  #8 (permalink)  
Antiguo 10/01/2010, 18:06
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: Problema de Principiante (Lenguaje C)

Hola,

pues solo corrige

num % 2 = res;

por

res = num % 2 ;


y listop
__________________
En programación hay mil y un formas de hacer lo mismo...
  #9 (permalink)  
Antiguo 11/01/2010, 10:15
Avatar de calathea  
Fecha de Ingreso: octubre-2008
Ubicación: Valladolid
Mensajes: 122
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: Problema de Principiante (Lenguaje C)

por si te sirve de algo, puedes leer los dos numeros de las coordenadas como tu dices

si pones: scanf("%f %f", &x, &y); entonces ambos numeros deberán estar separados por un espacio
si utilizas: scanf("%f,%f" &x, &y); entonces ambos numeros deberán estar separados por una coma

...y así sucesivamente
  #10 (permalink)  
Antiguo 17/01/2010, 04:31
Avatar de Gecast  
Fecha de Ingreso: diciembre-2009
Ubicación: Monterrey
Mensajes: 36
Antigüedad: 14 años, 4 meses
Puntos: 7
Respuesta: Problema de Principiante (Lenguaje C)

Fradve, Calathea, gracias por la ayuda. Ya probe con ambas y cierto, un error clásico :P jeje.

Quisiera preguntar ¿hay alguna manera para imprimir letras o signos especiales? Por ejemplo, las letras con acentos. ¿Cuál es?
  #11 (permalink)  
Antiguo 18/01/2010, 02:32
 
Fecha de Ingreso: enero-2010
Ubicación: Alicante
Mensajes: 4
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Problema de Principiante (Lenguaje C)

las letras con acentos deberían salir en la ventana de MS2 si programas en windows o en cualquier versión de Unix (Ubuntu, Mac etc), pero si haces un programa en Mac, en windows no saldrán los acentos y viceversa, eso es un problema de codificación. Prueba a cambiar la codificación de caracteres en los menús de tu editor y verás como sí que salen los acentos.

Y para escribir caracteres especiales, como las comillas o barras (/, \), en C Sharp se hace así, tienes que poner una barra invertida \, seguido de el carácter que quieras sacar por pantalla, si quieres sacar una comilla debes poner dentro del printf \".

Espero que te sirva de ayuda
  #12 (permalink)  
Antiguo 06/02/2010, 01:01
Avatar de Gecast  
Fecha de Ingreso: diciembre-2009
Ubicación: Monterrey
Mensajes: 36
Antigüedad: 14 años, 4 meses
Puntos: 7
Respuesta: Problema de Principiante (Lenguaje C)

@Desarah: Muchas gracias... aunque en realidad no sé que sucede, porque pongo los acentos y no me aparecen, en vez de eso, sale un signo mostrando que la letra con acento no logra aparecer. Uso Dev-C ¿Cómo sería eso de cambiar la codificación de carácteres?

Hoy tuve un... digamos "problema" que ya solucione, pero me quedo una duda, código a continuación:

Código C:
Ver original
  1. #include<stdio.h>
  2.  
  3. /* Suma cuadrados.
  4. El programa, al recibir como datos un grupo de enteros positivos, obtiene el
  5. cuadrado de los mismos y la suma correspondiente a dichos cuadrados.*/
  6.  
  7. int main (void)
  8. {
  9.     int num;
  10.     long cua, suc=0;
  11.     printf("Bienvenido\nIngrese un numero entero. - 0 para terminar: ");
  12.     scanf("%d", &num);
  13.     while(num)
  14.     /* Observa que la condición es verdadera mientras el entero es diferente de
  15.     cero.*/
  16.     {
  17.            cua = pow(num,2);
  18.            printf("\n%ld al cuadrado es: %d\n", num, cua);
  19.            suc += cua;
  20.            printf("\nIngrese un numero entero. - 0 para terminar: ");
  21.            scanf("%d", &num);
  22.     }
  23.     printf("\nLa suma de los cuadrados es %ld", suc);
  24.     getch();
  25. }

El problema resultó en que este es el código que copie del libro de donde tomo mis ejercicios, y así como tal, al ejecutar el cuadrado de unos números me dió esto:

1^2 = 1
2^2 = 4
3^2 = 9
4^2 = 16
5^2 = 24?
10^2 = 99?
15^2 = 224?

Lo solucione cambiando el "pow(x,y)" por un "cua = num*num" y volviendo todo entero. ¿Alguien sabe por qué razón sucedió algo así?

Gracias por el apoyo.
  #13 (permalink)  
Antiguo 06/02/2010, 10:25
Avatar de fradve  
Fecha de Ingreso: abril-2009
Mensajes: 157
Antigüedad: 15 años, 1 mes
Puntos: 7
Respuesta: Problema de Principiante (Lenguaje C)

Sugún veo ha sido solo un problema de presentación ya que cuando colocas:

Código C++:
Ver original
  1. printf("\n%ld al cuadrado es: %d\n", num, cua);

num es int no long int, entonces ahi debiste colocar solamente %d y cua que si es long entonces ahi debiste colocar %ld, es decir, tenía que estar así:

Código C++:
Ver original
  1. printf("\n%d al cuadrado es: %ld\n", num, cua);

y no hay necesidad de cambiar el pow
__________________
En programación hay mil y un formas de hacer lo mismo...
  #14 (permalink)  
Antiguo 06/02/2010, 10:33
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Busqueda Respuesta: Problema de Principiante (Lenguaje C)

El problema es la línea como dice fradve
printf("\n%ld al cuadrado es: %d\n", num, cua);

Eso es porque el prototipo de la función pow es el siguiente

double pow(double x, double y);

Es decir te devuelve un double.

Modifique un poco tu codigo para que funcione utilizando pow(x,y)

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<Math.h>
  3. #include<stdlib.h>
  4. int main (void){
  5.           int num;
  6.           float cua, suc=0;
  7.           printf("Bienvenido\nIngrese un numero entero. - 0 para terminar: ");
  8.           scanf("%d", &num);
  9.           while(num){
  10.                  cua = pow(num,2);
  11.                  printf("\n %d al cuadrado es: %.0f \n", num, cua);
  12.                  suc += cua;
  13.                  printf("\nIngrese un numero entero. - 0 para terminar: ");
  14.                  scanf("%d", &num);
  15.           }
  16.           printf("\nLa suma de los cuadrados es %.0f \n", suc);
  17.           system("PAUSE");
  18. }




------------------------------------
visiten www.devshared.net


Última edición por devshared; 06/02/2010 a las 12:43
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 06:57.