• Portada
    • Recientes
    • Usuarios
    • Registrarse
    • Conectarse

    Donde esta el problema?

    Programado Fijo Cerrado Movido
    Software
    4
    12
    1.6k
    Cargando más mensajes
    • Más antiguo a más nuevo
    • Más nuevo a más antiguo
    • Mayor número de Votos
    Responder
    • Responder como tema
    Accede para responder
    Este tema ha sido borrado. Solo los usuarios que tengan privilegios de administración de temas pueden verlo.
    • rul3sR
      rul3s Veteranos HL
      Última edición por

      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>

      MAIN: Ryzen7 3800X + RTX2070Super + Asus x470 StrixF + KFA2 HOF 16GB DDR4 4000 + NVMe Samsung 970 EvoPlus 500GB + Samsung 850Pro 512GB + Samsung 860QVO 2TB + Asus Xonar STX + Phanteks Enthoo Pro M Se + Seasonic Focus+ 650W

      LAPTOP: Asus Strix G531GT Intel i5 9300H + GTX1650 4GB + 16GB DDR4 2666 (8x2) + NVMe 256GB + 1TB HDD

      hlbm signature

      1 Respuesta Última respuesta Responder Citar 0
      • albertpgA
        albertpg
        Última edición por

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

        rul3sR 1 Respuesta Última respuesta Responder Citar 0
        • rul3sR
          rul3s Veteranos HL @albertpg
          Última edición por

          @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? 😛

          Saludos y gracias!</stdio.h>

          MAIN: Ryzen7 3800X + RTX2070Super + Asus x470 StrixF + KFA2 HOF 16GB DDR4 4000 + NVMe Samsung 970 EvoPlus 500GB + Samsung 850Pro 512GB + Samsung 860QVO 2TB + Asus Xonar STX + Phanteks Enthoo Pro M Se + Seasonic Focus+ 650W

          LAPTOP: Asus Strix G531GT Intel i5 9300H + GTX1650 4GB + 16GB DDR4 2666 (8x2) + NVMe 256GB + 1TB HDD

          hlbm signature

          lforosL K albertpgA 3 Respuestas Última respuesta Responder Citar 0
          • lforosL
            lforos Veteranos HL @rul3s
            Última edición por

            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 …

            hlbm signature

            1 Respuesta Última respuesta Responder Citar 0
            • K
              KanDa @rul3s
              Última edición por

              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 😛

              1 Respuesta Última respuesta Responder Citar 0
              • albertpgA
                albertpg @rul3s
                Última edición por

                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>

                albertpgA lforosL 2 Respuestas Última respuesta Responder Citar 0
                • albertpgA
                  albertpg @albertpg
                  Última edición por

                  Joer he tardado tanto en postear que…

                  rul3sR 1 Respuesta Última respuesta Responder Citar 0
                  • rul3sR
                    rul3s Veteranos HL @albertpg
                    Última edición por

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

                    Saludos!!

                    MAIN: Ryzen7 3800X + RTX2070Super + Asus x470 StrixF + KFA2 HOF 16GB DDR4 4000 + NVMe Samsung 970 EvoPlus 500GB + Samsung 850Pro 512GB + Samsung 860QVO 2TB + Asus Xonar STX + Phanteks Enthoo Pro M Se + Seasonic Focus+ 650W

                    LAPTOP: Asus Strix G531GT Intel i5 9300H + GTX1650 4GB + 16GB DDR4 2666 (8x2) + NVMe 256GB + 1TB HDD

                    hlbm signature

                    1 Respuesta Última respuesta Responder Citar 0
                    • lforosL
                      lforos Veteranos HL @albertpg
                      Última edición por

                      #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>

                      hlbm signature

                      rul3sR 1 Respuesta Última respuesta Responder Citar 0
                      • rul3sR
                        rul3s Veteranos HL @lforos
                        Última edición por

                        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>

                        MAIN: Ryzen7 3800X + RTX2070Super + Asus x470 StrixF + KFA2 HOF 16GB DDR4 4000 + NVMe Samsung 970 EvoPlus 500GB + Samsung 850Pro 512GB + Samsung 860QVO 2TB + Asus Xonar STX + Phanteks Enthoo Pro M Se + Seasonic Focus+ 650W

                        LAPTOP: Asus Strix G531GT Intel i5 9300H + GTX1650 4GB + 16GB DDR4 2666 (8x2) + NVMe 256GB + 1TB HDD

                        hlbm signature

                        K 1 Respuesta Última respuesta Responder Citar 0
                        • K
                          KanDa @rul3s
                          Última edición por

                          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.

                          lforosL 1 Respuesta Última respuesta Responder Citar 0
                          • lforosL
                            lforos Veteranos HL @KanDa
                            Última edición por

                            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>

                            hlbm signature

                            1 Respuesta Última respuesta Responder Citar 0
                            • 1 / 1
                            • First post
                              Last post

                            Foreros conectados [Conectados hoy]

                            2 usuarios activos (0 miembros e 2 invitados).
                            febesin, pAtO,

                            Estadísticas de Hardlimit

                            Los hardlimitianos han creado un total de 543.3k posts en 62.8k hilos.
                            Somos un total de 34.7k miembros registrados.
                            sridharpat ha sido nuestro último fichaje.