Donde esta el problema?


  • 0

    Hola!! Pues bien, como algunos ya sabreis porque lo comente en otro post, ahora estoy haciendo informatica de sistemas.
    Pues bien, tengo un problemilla en uno de los ejercicios de programacion, nos mandan hacer un programa que dada una sequencia de numeros nos diga si estos son pares todos, o no, y algo me falla porque me da el siguiente error:

    [Raul@Portatil MTP]$ gcc 1.c
    1.c: In function ‘main’:
    1.c:11: error: expected ‘;’ before ‘}’ token
    1.c:12: error: ‘else’ without a previous ‘if’

    Lo que yo he escrito es esto:

    #include<stdio.h>

    main()
    {
    int num;
    printf( "Escriva la sequencia de numeros:" );
    scanf( "%i", &num );
    while( num % 2 == 2 && num != 0 );
    scanf( "%i", &num );

    if ( num % 2 != 0); printf( "No todos los numeros son pares \n" );
    else printf( "Todos los nombres son pares \n" );
    }

    Os agradeceria un poquito de ayuda y que me indicarais donde esta el error.

    Gracias ;D :p</stdio.h>



  • 1

    Te falta abrir una llave detrás del ultimo if (y cerrarla)



  • 2

    @albertpg:

    Te falta abrir una llave detrás del ultimo if (y cerrarla)

    Asi?

    #include<stdio.h>

    main()
    {
    int num;
    printf( "Escriva la sequencia de numeros:" );
    scanf( "%i", &num );
    while( num % 2 == 2 && num != 0 );
    scanf( "%i", &num );

    if**{num % 2 != 0}**; printf( "No todos los numeros son pares \n" );
    else printf( "Todos los nombres son pares \n" );
    }

    Asi tampoco va, supongo que no es a lo que te referias, pero esque no te he entendido….
    Podrias explicarmelo un poquitin mas detalladamente si no te importa? :p

    Saludos y gracias!</stdio.h>



  • 3

    Hace mil años que no programo, pero creo que es:

    if ( num % 2 != 0) printf( "No todos los numeros son pares \n" );
    else printf( "Todos los nombres son pares \n" );

    osea sin el punto y coma tras la evaluación del if. Lo que no recuerdo es si llevaba else necesitaba o no llaves. Lo que debería funcionar es:

    if ( num % 2 != 0) {
    printf( "No todos los numeros son pares \n" );
    } else {
    printf( "Todos los nombres son pares \n" );
    }

    De todas formas, creo que el programa no hace lo que tu pretendes …



  • 4

    Prueba:

    _#include<stdio.h>

    main() {
    int num;
    printf( "Escriba la sequencia de numeros:" );
    scanf( "%i", &num );
    while ( num % 2 == 2 && num != 0 ) {
    scanf( "%i", &num );

    if(num % 2 != 0) { printf( "No todos los numeros son pares \n" ); }
    else { printf( "Todos los nombres son pares \n" ); }
    }
    }</stdio.h>_

    Lástima que se pierda el tabulado al postear :P



  • 5

    No, no. Así:

    #include<stdio.h>

    main()
    {
    int num;
    printf( "Escriva la sequencia de numeros:" );
    scanf( "%i", &num );
    while( num % 2 == 2 && num != 0 );
    scanf( "%i", &num );

    if ( num % 2 != 0){ //detrás de un if, for while, no se pone punto y coma (;)
    printf( "No todos los numeros son pares \n" );
    else {
    printf( "Todos los nombres son pares \n" );
    } // cierra la llave del if
    } //cierra la llave del else
    } // cierra la llace del main</stdio.h>



  • 6

    Joer he tardado tanto en postear que…



  • 7

    jajajaja, muchas gracias chicos!!! ya esta solventado.

    Saludos!!



  • 8

    #include<stdio.h>

    main() {
    int num;
    printf( "Escriba la sequencia de numeros:" );
    scanf( "%i", &num );
    while ( num % 2 == 2 && num != 0 ) {
    scanf( "%i", &num );
    }
    if(num % 2 != 0) {
    printf( "No todos los numeros son pares \n" );
    } else {
    printf( "Todos los nombres son pares \n" );
    }
    }

    El cierre de la llave de while tiene que estar tras el scanf para que pida números mientras sean pares.

    El comportamiento es que se repite el bucle hasta que aparece un impar o se introduce un cero y entonces te da la respuesta. Si es esto lo que te piden bien. Si lo que te piden es que no se pare aunque se introduzca un impar y solo salga al meter un 0, necesitas una variable intermedia booleana que cambie cuando aparezca un impar.</stdio.h>



  • 9

    jejeje, si no os importa, os pido un poco mas de ayuda con mi primera practica.

    Ahora lo que se nos pide es, que dada una sequencia de numeros marcada su fin con 0, contar cuantas restas entre numeros consecutivos da como resultado un valor K asignado anteriormente.

    Mi propuesta es esta:

    #include<stdio.h>

    main()
    {
    int a,b,k,resta,suma;
    suma=0;
    printf("Introdueixi el valor k, que sera la diferencia entre numeros");
    scanf( "%i",&k );
    printf("Introdueixi la sequencia de numeros");
    scanf( "%i",&a );
    while( a != 0 );
    {
    scanf("%i",&b);
    if (a > b) {(a-b = resta);
    if (resta=k);
    {
    (suma=suma+1);
    }
    }
    else (b-a = resta);
    if (resta=k);
    {
    (suma=suma+1);
    }
    }
    printf("Hi han %i restes possibles que donen com a resultat %i \n", suma, k );
    }

    PERO ME SALTA ESTE ERROR!!! xD

    [Raul@Portatil Practica 1]$ gcc 1.c prova.exe
    gcc: prova.exe: El fitxer o directori no existeix
    1.c: In function ‘main’:
    1.c:8: error: expected ‘;’ before ‘printf’
    1.c:15: error: lvalue required as left operand of assignment
    1.c:21: error: lvalue required as left operand of assignment

    Os agradeceria vuestros savios comentarios!!!

    Saludos</stdio.h>



  • 10

    No veo el error que dice que te falta un ; al final de la linea anterior, pero en cuanto a:
    (b-a = resta), esa operacion esta mal, si quieres comparar b-a con resta, tienes que hacer (b-a) == resta. Si lo que quieres es asignar resta a a o a b, tienes que hacer a= resta; o b = resta;, pero el aporador de asignacion = no se le puede aplicar (generalmente) a otras operaciones.

    EDITO: no se como no lo vi antes, en una sentecia condicional del estilo
    while (condicion) { hacer esto; } o
    if (condicion) { hacer esto; }
    else { hacer esto otro; }

    no debes poner ; despues de los parentesis que rodean la condicion, solo al final de las instrucciones deltro de las llaves.

    PD: si un if o un else van a realizar una unica instruccion, al menos en C++ no es necesario usar llaves, o sea "{ }"

    PD2: el unico caso que recuerdo que si lleva ; tras los parentesis de la condicion es el do while:

    do { hacer esto; } while (condicion);

    Espero haberte aclarado algo las cosas.



  • 11

    Puedes optimizar el código eliminando la variable "resta". No la necesitas.

    No recuerdo como se llamaba la función valor absoluto (devuelve el número sin signo), ni si esta era nativa del lenguaje o si necesitaba alguna librería. Si puedes usarla puedes optimizar todavía más el código.

    Por ejemplo, si la función es abs(número), el código sería:

    #include<stdio.h>

    main() {
    int a,b,k,suma;
    suma=0;
    printf("Introdueixi el valor k, que sera la diferencia entre numeros");
    scanf( "%i",&k );
    printf("Introdueixi la sequencia de numeros");
    scanf( "%i",&a );
    while( a != 0 ) {
    scanf("%i",&b);
    if (abs(a-b)==k) { suma=suma+1 }
    scanf( "%i",&a )
    }
    printf("Hi han %i restes possibles que donen com a resultat %i \n", suma, k );
    }

    Si no puedes usar valor absoluto , sustituye la comparación (abs(a-b)==k) por ((a-b==k) || (a-b==-k)). Será más eficiente que las comparaciones if.

    Además, en tu código …

    1. te sobra el ; detrás del paréntesis del while. El ; se pone después de la instrucción.
    2. te falta un scanf para la variable a dentro del while. Si no lo pones será un bucle infinito.</stdio.h>





Has perdido la conexión. Reconectando a Hardlimit.