• Portada
    • Recientes
    • Usuarios
    • Registrarse
    • Conectarse

    Uff….menuda practica nos han metido xD, un poquito de ayuda?

    Programado Fijo Cerrado Movido
    Software
    5
    7
    1.4k
    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 gente!!

      Pues vereis, despues de mas de 1 mes sin hacer programacion (entre vacaciones, examenes i tal…) pues nos han metido una practica un tanto chunguilla.

      Os comento, el programa consiste en introducir un texto, y que el programa nos diga si el texto es spam o no.
      Las palabras consideradas spam son: Viagra Cialis Nigeria Caca Pedo Culo Pis
      El texto sera Spam siempre que cumpla estas 2 condiciones a la vez:

      • El numero total de apariciones de palabras de esta lista sea mayor de 6
      • Aparezcan almenos 3 palabras de esa lista.

      Bueno, pues lo que yo tenia pensado de momento, con diseño descendiente obviamente

      #include<stdio.h>
      #include<string.h>
      #define MAXCAR 15

      1r Nivel

      main ()
      {
      char spam1[viagra], spam2[cialis], spam3[nigeria], spam4[caca], spam5[pedo], spam6[culo], spam7[pis], actual, palabra[MAXCAR];
      int contador=0, contador2=0, s1=0, s2=0, s3=0, s4=0, s5=0, s6=0, s7=0, spam=0;

      leer_primera_palabra(actual,palabra);

      comparar_palabra(actual,spam1[viagra],spam2[cialis],spam3[nigeria],pam4[caca],spam5[pedo],spam6[culo],spam7[pis])

      while(comparador(actual,spam1[viagra],spam2[cialis],spam3[nigeria],pam4[caca],spam5[pedo],spam6[culo],spam7[pis])=1;
      {
      leer_palabra(actual)
      comparar_palabra(actual,spam1[viagra],spam2[cialis],spam3[nigeria],pam4[caca],spam5[pedo],spam6[culo],spam7[pis])
      }
      contador++
      if (actual=spam1) {s1++};
      if (actual=spam2) {s2++};
      if (actual=spam3) {s3++};
      if (actual=spam4) {s4++};
      if (actual=spam5) {s5++};
      if (actual=spam6) {s6++};
      if (actual=spam7) {s7++};
      if (actual=spam1 & s1=1){contador2++};
      if (actual=spam2 & s2=1){contador2++};
      if (actual=spam3 & s3=1){contador2++};
      if (actual=spam4 & s4=1){contador2++};
      if (actual=spam5 & s5=1){contador2++};
      if (actual=spam6 & s6=1){contador2++};
      if (actual=spam7 & s7=1){contador2++};

      texto_spam(contador, contador2, spam);
      if(spam=1){printf("El texto es SPAM \n")};
      else {printf("El texto no es SPAM, no hay troles a la vista \n")};
      }

      2do Nivel

      Void leer_primera_palabra(char actual[])
      {
      Scanf(“%c”,& actual);
      Leer_palabra(actual,palabra);
      }

      Void leer_palabra(char actual, char palabra[]);
      {
      Saltar_espacios(actual);
      Copiar_palabra(palabra,actual);

      Void texto_spam(int contador, int contador2, int spam)
      {
      If(contador > 6 && contador2 > 3){spam=1}
      }

      3r Nivel

      void saltar_espacios(char & actual);
      {
      While(actual == “ “) scanf(“%c”,& actual);
      }

      void copiar_palabra(char palabra[], char & actual);
      {
      int i=0
      while(actual != “ ” && actual != “.”)
      {
      paraula_
      i++
      scanf(“%c”,& actual);
      }
      Paraula_= “\0”;
      }

      Como lo veis? Bueno….ya me lo imagino, pero esta tan mal como yo me pienso, o tiene un pase...xD?

      Saludos y os lo agradecere todo lo que podais decir/opinar ;D__</string.h></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

        Joer macho, llevo 5 años en la carrera y sabes programar mejor que yo 😄

        Suerte!

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

          @albertpg:

          Joer macho, llevo 5 años en la carrera y sabes programar mejor que yo 😄

          Suerte!

          Pues si estoy en 1ro!!! xDD

          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

          _ruso_ 1 Respuesta Última respuesta Responder Citar 0
          • _ruso_
            _ruso @rul3s
            Última edición por

            Joder que mala pinta tiene ese codigo 😄

            No me acuerdo de lo que podia hacer C pero se me ocurre que se puede resolver facilmente con las funciones de las cadenas
            Si metes todo el texto como si fuera una cadena le puedes hacer por ejemplo
            texto.Contains("Palabra) y te devuelve si el texto tiene esa palabra
            texto.Split("Palabra") te devuelve un array de strings partidos donde se ha encontrado esa palabra. Array.lenght - 1 = numero de apariciones de esa palabra en el texto
            Con eso y un par de if y un par de FOR deberia ser suficiente

            Salu2

            XaviJSX 1 Respuesta Última respuesta Responder Citar 0
            • XaviJSX
              XaviJS Veteranos HL @_ruso
              Última edición por

              AlbertPG; lo tuyo es un caso aparte, no entiendo como puedes aprobar la asignatura de MTP sin saber programar; esque no lo entiendo… y MTP2? también la tienes aprobada?

              Cuanto le pagas a tu compañero de trabajo?:D;D

              Saludos!

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

                No hombre.. si que se jejeje, pero se me da bastante mal.

                MTP1, la verdad q la aprobé gracias a mis compañeros, y MTP2, las prácticas son más ´fáciles y ahi si que las entendía 😉

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

                  Como algunas ideas:

                  1. Yo crearía un array de cadenas (osea un array de arrays de char) para almacenar todas las palabras prohibidas.

                  2. Solo crearía tres funciones: una para leer una palabra de una cadena (no necesitas una para leer la primera palabra y otra para el resto, como lo has puesto), otra para comprobar si una palabra está en el array de palabras y otra para insertar una palabra en el array. Son muy sencillas.

                  3. El código main lo único que tendría que hacer es llamar a la función leer palabra, llamar a la función que comprueba si la palabra está en la lista de prohibidas y si lo está incrementar un contador entero (para comprobar si aparecen 6 palabras) y otro contador para ver si aparecen tres palabras distintas. Te lo pongo en pseudocódigo:

                  char [] palabra;
                  char [][] palabras_prohibidas, palabras_encontradas;
                  int contador_prohibidas, contador_distintas;

                  "Inicializar palabras_prohibidas con la lista correspondiente"
                  "Función LeerPalabra lee una palabra de la cadena_de_entrada, devuelve la palabra como resultado y modifica la cadena, eliminando la palabra leída. Devuelve null si la cadena está vacía"
                  "Función EstaEnLaLista comprueba si la palabra está en la lista y devuelve true si lo está o false si no está en la lista"
                  "Función InsertarEnLaLista inserta una palabra en la lista devolviendo true si se puede insertar y false si la palabra ya estaba insertada en la lista previamente"

                  const max_ocurrencias=6
                  const max_distintas=3

                  palabra=null
                  palabras_prohibidas="Lista de palabras prohibidas"
                  palabras_encontradas=null
                  contador_prohibidas=0
                  contador_distintas=0

                  Repetir
                  ….palabra=LeerPalabra (cadena_de_entrada)
                  ....Si EstaEnLaLista (palabra, palabras_prohibidas) Entonces
                  ........ contador_prohibidas++;
                  ........ Si InsertarEnLaLista (palabra, palabras_encontradas) Entonces
                  ............ contador_distintas++;
                  ........ Fin del Si
                  ....Fin del Si
                  Hasta que (contador_prohibidas>=max_ocurrencias y contador_distintas>=max_distintas) o (palabra=null)

                  Si palabra=null Entonces
                  .... Las condiciones no se cumplen: No es Spam
                  Sino
                  .... Las condiciones se cumplen: SPAM

                  Creo que es una solución bastante elegante y tiene la ventaja de que te servirá para cualquier conjunto de palabras y para cualquier condición de salida (sean 6 ocurrencias y 3 distintas o cualquier otra)

                  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.
                  ssaybb ha sido nuestro último fichaje.