problemas con c

Avatar de Usuario
fires
Mensajes: 42
Registrado: 06 Feb 2007 20:00
Ubicación: Asuncion-Paraguay

problemas con c

Mensaje por fires »

hola...estoy usando el compilador dev c++..mejor dicho la ultima version...
al querer compilar me sale un error de tipo de dato..pero no se porque si tendria que coincidar...
el codigo es:

Código: Seleccionar todo

/*  Ejercicio #34 -lenguaje 1
    Prepare una funcion que retorne la cantidad de ocurrencias de una determinada
    palabra dentro de un parrafo. El prototipo de la funcion es el siguiente:
            FUNCTION CantOcur(parrafo, palabra : Cad40) : Integer;
    Donde Cad40 es un tipo de datos definido como string[40]
*/

#include <stdio.h>
#include <string.h>
#define N 40

//funcion longitud de cadena. Determina la longitud de la cadena ingresada
int longitud_cadena(char *x)
{
    //declarar las variables locales a la funcion longitud_cadena
    int i;
    
    i = 0;
    while( x[i] != '\0')
    {
           i = i + 1;       
    }
    return(i);
}


//funcion para saber cuantas veces se repite una palabra en un parrafo
int CantOcur(char *parrafo, char *palabra)
{
    //declarar las variables locales de la funcion CantOcur
    int i, c = 0;
    char pal[N];
    
    strncpy(pal,"",1);
    for( i = 0; i < longitud_cadena(parrafo); i++)
    {
       if(palabra[i] != ' ')
       {
          pal = pal + palabra[i];                        
       }  
       else if(strcmp(palabra,pal) == 0)
       {
          c = c + 1;  
          strncpy(pal,"",1);   
       }
       else
       {
           strncpy(pal,"",1);    
       }
    } 
    if( (strcmp(palabra,pal) == 0)
    {
        c = c + 1;    
    }
    return(c);
}



//funcion principal
main()
{
      //declarar las variables locales del programa principal      
      char parrafo[N], palabra[N];
      short cant;
      
      printf("Ingrese un texto por favor: \n");
      scanf("%s",&parrafo);
      printf("Ingrese una palabra cualquiera: \n");
      scanf("%s",&palabra);
      cant = CantOcur(parrafo, palabra);
      if ( cant == 0 )
      {
         printf("La palabra %s no esta en el parrafo\n",palabra);     
      }
      else if( cant == 1 )
      {
           printf("La palabra %s esta solo %d vez en el parrafo\n",palabra, cant);     
      }
      else
      {
          printf("La palabra %s esta %d veces en el parrafo\n",palabra,cant);    
      }
      getch();
}
y ya me vuelvo loco y ya no se como solucionar..
Avatar de Usuario
Dragonlich
Mensajes: 584
Registrado: 05 Feb 2007 07:34
Ubicación: Murcia

Re: problemas con c

Mensaje por Dragonlich »

Usas dos funciones.... pero en ningun momento las llamas como tales, osea les pones nombres para que funcionen.......
Avatar de Usuario
Zoltelder
Mensajes: 4727
Registrado: 02 Feb 2007 19:59
Ubicación: Badajoz

Re: problemas con c

Mensaje por Zoltelder »

Vaya manera de complicar el ejercicio... no me entero para que haces algunas cosas.
Si me dices la linea donde te da el error te podré decir algo más.

Mira aquí mi versión de ese ejercicio (la cual considero más corta y más facil):

Código: Seleccionar todo

#include<stdio.h>
#include<conio.h>
#include<string.h>



int subcadena (char cadena [80], char palabra[20])
{

        int i=0, cont=0, enc=0;


        while(i<strlen(cadena))

        {
              if(cadena[i]==palabra[cont])
              {
                        cont++;

                        if(cont==strlen(palabra))

                                enc++;

                        else
                                i++;

              }
              else
              {
                        cont=0;
                        i++;
              }

        }

        return enc;
}


void main()
{
	char cadena[80], palabra[20];
	int enc;



	printf("Introduce una cadena \n");
        gets(cadena);

        printf("Introduce palabra \n");
        gets(palabra);


        enc=subcadena(cadena, palabra);

        if(enc==0)
                printf("La palabra no esta en el parrafo \n");
        else
                printf("Hay %d palabras en el parrafo \n", enc);



	getch();

}
Icono de PC  PC Gamer Desplegar firma
  • Procesador
    Intel i5 750 3.8GHz
  • Placa base
    Asus P7P55D PRO
  • RAM
    GSkill Trident 4GB 1600Mhz
  • Tarjeta gráfica
    Gigabyte 5850
  • Disco Duro
    SSD Crucial M4 128GB / WD CB 1TB / WD CB 500GB
  • Unidad Óptica
    -
  • Refrigeración
    Noctua NH-U12P SE2
  • Fuente alimentación
    Corsair HX 650
  • Caja
    Antec Twelve Hundred
  • Sonido
    Creative X-Fi Titanium
  • Sistema operativo
    Windows 7 Ultimate 64 bits
  • Monitor
    LG W2453V-PF
  • Teclado
    Logitech Wave
  • Ratón
    Logitech G9x
  • Otros
    Sennheiser PC350
  • Otros
    -
Ocultar
Avatar de Usuario
fires
Mensajes: 42
Registrado: 06 Feb 2007 20:00
Ubicación: Asuncion-Paraguay

Re: problemas con c

Mensaje por fires »

Dragonlich...porque dices que no uso dos funciones??

Zoltelder.. muchas gracias..el error que me sale es:

strncpy(pal,"",1);
for( i = 0; i < longitud_cadena(parrafo); i++)
{
if(palabra != ' ')
{
pal = pal +palabra;
} /*en la parte de arriba..osea en pal = pal + palabra*/

Voy a probar tu programa..pero si me puedes decir como slucionar el mio..asi aprendo de mis errores..desde ya muchas agracias amios...:)
Avatar de Usuario
fires
Mensajes: 42
Registrado: 06 Feb 2007 20:00
Ubicación: Asuncion-Paraguay

Re: problemas con c

Mensaje por fires »

Zoltelder....me gusto mucho como hiciste tu codigo...muy simple...pero hay un inconveniente...
que pasa si se escribe esta oracion?
cadena :"como que tal quet quet quet"
palabra : "que".
te sale: 3 veces que se repiten...

por eso yo usaba un acumulador para guardar la palabra que ingresaba hasta que encontraba un espacio... en tu caso si encuentra una similitud en la palabra...ya cuenta si saber si se siguen mas caractere(osea si va ser otra palabra)..no se si me exprese bien...:)
Avatar de Usuario
Zoltelder
Mensajes: 4727
Registrado: 02 Feb 2007 19:59
Ubicación: Badajoz

Re: problemas con c

Mensaje por Zoltelder »

Ya se donde tienes el fallo. El problema es que donde tu quieres acumular, estás utilizando una variable de tipo char como un numero.

A una cadena no le puedes decir que vaya sumando porque las letras no se pueden sumar.

Tendrás que utlizar funciones de cadena como copiar, strcpy(pal,palabra);

Mira aquí te pongo mi codigo del programa, esta vez corregido el fallo cuando se daba ese caso que tu citas:

Código: Seleccionar todo

#include<stdio.h>
#include<conio.h>
#include<string.h>



int subcadena (char cadena [80], char palabra[20])
{

        int i=0,j, cont=0, enc=0;


        while(i<strlen(cadena))

        {
              if(cadena[i]==palabra[cont])
              {
                        cont++;

                        j=i;
                        if(cont==strlen(palabra))
                        {
                                if((cadena[j+1]==' ')||(cadena[j+1]=='\0'))

                                        enc++;
                        }

                        else
                                i++;

              }
              else
              {
                        cont=0;
                        i++;
              }

        }

        return enc;
}


void main()
{
   char cadena[80], palabra[20];
   int enc;



        printf("Introduce una cadena \n");
        gets(cadena);

        printf("Introduce palabra \n");
        gets(palabra);


        enc=subcadena(cadena, palabra);

        if(enc==0)
                printf("La palabra no esta en el parrafo \n");
        else
                printf("Hay %d palabras en el parrafo \n", enc);



   getch();

}
Icono de PC  PC Gamer Desplegar firma
  • Procesador
    Intel i5 750 3.8GHz
  • Placa base
    Asus P7P55D PRO
  • RAM
    GSkill Trident 4GB 1600Mhz
  • Tarjeta gráfica
    Gigabyte 5850
  • Disco Duro
    SSD Crucial M4 128GB / WD CB 1TB / WD CB 500GB
  • Unidad Óptica
    -
  • Refrigeración
    Noctua NH-U12P SE2
  • Fuente alimentación
    Corsair HX 650
  • Caja
    Antec Twelve Hundred
  • Sonido
    Creative X-Fi Titanium
  • Sistema operativo
    Windows 7 Ultimate 64 bits
  • Monitor
    LG W2453V-PF
  • Teclado
    Logitech Wave
  • Ratón
    Logitech G9x
  • Otros
    Sennheiser PC350
  • Otros
    -
Ocultar
Avatar de Usuario
fires
Mensajes: 42
Registrado: 06 Feb 2007 20:00
Ubicación: Asuncion-Paraguay

Re: problemas con c

Mensaje por fires »

ahora sip sale lo que dijiste...gracias por la idea..muy simple salio tu programa...yo lo que hago es concatenar al hacer esa suma...en pascal se puede hacer asi..por lo visto en c nop..quisiera saber si existe una funcion en c que concatene??
Avatar de Usuario
Zoltelder
Mensajes: 4727
Registrado: 02 Feb 2007 19:59
Ubicación: Badajoz

Re: problemas con c

Mensaje por Zoltelder »

Para concatenar esta la funcion strcat. Funciona asi:

strcat(cadena destino, cadena fuente);
Icono de PC  PC Gamer Desplegar firma
  • Procesador
    Intel i5 750 3.8GHz
  • Placa base
    Asus P7P55D PRO
  • RAM
    GSkill Trident 4GB 1600Mhz
  • Tarjeta gráfica
    Gigabyte 5850
  • Disco Duro
    SSD Crucial M4 128GB / WD CB 1TB / WD CB 500GB
  • Unidad Óptica
    -
  • Refrigeración
    Noctua NH-U12P SE2
  • Fuente alimentación
    Corsair HX 650
  • Caja
    Antec Twelve Hundred
  • Sonido
    Creative X-Fi Titanium
  • Sistema operativo
    Windows 7 Ultimate 64 bits
  • Monitor
    LG W2453V-PF
  • Teclado
    Logitech Wave
  • Ratón
    Logitech G9x
  • Otros
    Sennheiser PC350
  • Otros
    -
Ocultar
Avatar de Usuario
Dragonlich
Mensajes: 584
Registrado: 05 Feb 2007 07:34
Ubicación: Murcia

Re: problemas con c

Mensaje por Dragonlich »

No me hagais mucho caso que hace muchisimo tiempo que no toco C jejejejeje siento lo de la confusion
Avatar de Usuario
fires
Mensajes: 42
Registrado: 06 Feb 2007 20:00
Ubicación: Asuncion-Paraguay

Re: problemas con c

Mensaje por fires »

dale no hay problema dragonlich...y gracias zoltelder...
Responder