• Portada
    • Recent
    • Users
    • Register
    • Login

    Donde esta el problema?

    Scheduled Pinned Locked Moved Software
    12 Posts 4 Posters 2.2k Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • rul3sR Offline
      rul3s Veteranos HL
      last edited by

      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 Reply Last reply Reply Quote 0
      • albertpgA Offline
        albertpg
        last edited by

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

        rul3sR 1 Reply Last reply Reply Quote 0
        • rul3sR Offline
          rul3s Veteranos HL @albertpg
          last edited by

          @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 Replies Last reply Reply Quote 0
          • lforosL Offline
            lforos Veteranos HL @rul3s
            last edited by

            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 Reply Last reply Reply Quote 0
            • K Offline
              KanDa @rul3s
              last edited by

              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 Reply Last reply Reply Quote 0
              • albertpgA Offline
                albertpg @rul3s
                last edited by

                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 Replies Last reply Reply Quote 0
                • albertpgA Offline
                  albertpg @albertpg
                  last edited by

                  Joer he tardado tanto en postear que…

                  rul3sR 1 Reply Last reply Reply Quote 0
                  • rul3sR Offline
                    rul3s Veteranos HL @albertpg
                    last edited by

                    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 Reply Last reply Reply Quote 0
                    • lforosL Offline
                      lforos Veteranos HL @albertpg
                      last edited by

                      #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 Reply Last reply Reply Quote 0
                      • rul3sR Offline
                        rul3s Veteranos HL @lforos
                        last edited by

                        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 Reply Last reply Reply Quote 0
                        • K Offline
                          KanDa @rul3s
                          last edited by

                          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 Reply Last reply Reply Quote 0
                          • lforosL Offline
                            lforos Veteranos HL @KanDa
                            last edited by

                            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 Reply Last reply Reply Quote 0

                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                            With your input, this post could be even better 💗

                            Register Login
                            • 1 / 1
                            • First post
                              Last post

                            Foreros conectados [Conectados hoy]

                            0 usuarios activos (0 miembros y 0 invitados).
                            febesin, pAtO, smith

                            Estadísticas de Hardlimit

                            Los hardlimitianos han creado un total de 543.7k posts en 62.9k hilos.
                            Somos un total de 35.2k miembros registrados.
                            jeromep8669916 ha sido nuestro último fichaje.
                            El récord de usuarios en linea fue de 123 y se produjo el Thu Jan 15 2026.