• Viernes 8 de Noviembre de 2024, 19:40

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Carlota

Páginas: [1]
1
C/C++ / Duda - Una cadena contenida en otra
« en: Domingo 5 de Septiembre de 2010, 22:02 »
Hola! Paso por aqui porque tengo problemas con un algortimo... Dejo el enunciado y os explico lo que me ocurre:
Comprobar si una cadena esta contenida en otra y, si fuera asi, indicar la posicion del primer caracter.
USAR: int buscar_cadena(char *cad1, char *cad2)


El codigo que he hecho:

Código: C++
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define TAM 100
  4.  
  5. char strsub(char *c1, char *c2);
  6. int buscar_cadena(char *c1, char *c2);
  7. void leer_cadena(char cad[]);
  8.  
  9. int main(){
  10.     char c1[TAM],c2[TAM];
  11.     int res;
  12.    
  13.     leer_cadena(c1);
  14.     leer_cadena(c2);
  15.    
  16.     res=strsub(c1, c2);
  17.     if(res==0) puts("Las cadenas son iguales (ambas incluidas una en otra)");
  18.     else if(res==1) puts("Primera cadena incluida en segunda");
  19.          else if(res==2) puts("Segunda cadena incluida en primera");
  20.               else if(res==3) puts("Las cadenas no estan incluidas ninguna en otra");
  21.              
  22.     system("PAUSE");
  23.     return 0;
  24. }
  25.  
  26. //Cabecera: char strsub(char *c1, char *c2);
  27. //Precondicion:Dos cadenas inicializadas
  28. //Postcondicion: Devuelve si una cadena esta contenida en otra y viceversa
  29.  
  30. char strsub(char *c1, char *c2){
  31.      int c2enc1, c1enc2;
  32.      c2enc1= buscar_cadena(c1,c2);
  33.      c1enc2= buscar_cadena(c2,c1);
  34.      
  35.      if(c2enc1==-1)
  36.                     if(c1enc2==-1){
  37.                                    return 3;
  38.                                    } /* no hay inclusiones */
  39.                     else return 1; /*c1 incluida en c2*/
  40.      if(c1enc2==-1){
  41.                     return 2;
  42.                     } /*c2 incluida en c1 */
  43.      
  44.      return 0; /* c1 y c2 son iguales */
  45.      }
  46.      
  47.      
  48. //Cabecera: int buscar_cadena(char *c1, char *c2);
  49. //Precondicion:Dos cadenas inicializadas
  50. //Postcondicion: Posicion de una en otra
  51.  
  52. int buscar_cadena(char c1[], char c2[]){
  53.     int pos=0;
  54.     int i;
  55.    
  56.     while(1){
  57.              for(i=0;c1[pos+i]!='' && c2[i]!='';i++)
  58.                                      if(c1[pos+i]!=c2[i]) break;
  59.  
  60.              if(c2[i]=='') return pos;
  61.              if(c1[pos+i]==''){
  62.                                  printf("El primer caracter se encontro en la posicion %in",pos+1);
  63.                                  return -1;
  64.                                  }
  65.              pos++;
  66.              }
  67.              }
  68.                      
  69.                      
  70. //Cabecera: leer_cadena(char cad[])
  71. //Precondicion: cad inicializada
  72. //Postcondicion: lee una cadena
  73.                
  74. void leer_cadena(char cad[]){
  75.    
  76.      int i;
  77.      puts("Introduce cadena y pulsa ENTER para terminar la cadena");
  78.      fgets(cad, 100, stdin);
  79.      fflush(stdin);
  80.      }                                    
  81.  
  82.  

Lo que me ocurre esque si por ejemplo introduzco:
Esta entrada es correcta
Y luego escribo:
es correcta

Me da la posicion y me indica que la segunda cadena esta contenida en la primera... bien hasta aqui, pero si en la segunda cadena escribo esto:

entrada

Me indica que ninguna cadena esta contenida una en otra y las posiciones salen erroneas...

Alguien podria decirme donde esta fallando y que podria hacer para arreglarlo?

2
C/C++ / Sucesion Recursividad
« en: Sábado 28 de Agosto de 2010, 22:19 »
Hola gente!
Estoy programando en C y tengo el siguiente codigo:

Código: C++
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int num_guay(int n);
  5.  
  6. int main(){
  7.     int n, res;
  8.     printf("Introduce un numeron");
  9.     scanf("%i",&n);
  10.    
  11.     res=num_guay(n);
  12.    
  13.     if(res==1) printf("El numero es guayn");
  14.     else printf("El numero NO es guayn");
  15.    
  16.     system("PAUSE");
  17.     return 0;
  18. }
  19.  
  20. //Cabecera: int num_guay(int n);
  21. //Precondicion: n inicializado
  22. //Postcondicion: devuelve 1 ó 0 si un numero es guay o no
  23.  
  24. int num_guay(int n){
  25.     int i;
  26.     i=1;
  27.    
  28.     switch(n){
  29.               case 1: return 1;break;
  30.               case 0: return 0;break;
  31.              
  32.               default: i++;
  33.                        if(i>n) return 0;break;
  34.                        
  35.                        num_guay(n-i);
  36.                        }
  37.                        }
  38.  

El enunciado del problema me pide que dado un numero n, realizar un algoritmo recursivo que escriba por pantalla si ese numero pertenece o no a esta sucesion: 1 + 3(1+2) + 6(1+2+3) + ... (Devolver 1 si fuera asi, y 0 si no lo es)

La parte que tengo mas duda es la del switch, ya que cuando compilo el programa me he dado cuenta de que tan solo llama a la funcion una vez cuando entra en deafult y no se como hacer para que lo haga las veces necesarias...

Si alguien me pudiera ayudar lo agradeceria ^_^

Saludos!

3
C/C++ / Declaraciones C++
« en: Jueves 19 de Agosto de 2010, 20:29 »
Hola! Soy nueva en el foro... dejo este ejercicio bastante corto que consiste en realizar declaraciones, pero me he quedadado atrapada >.<

a) Un tipo enumerado que se llame logico y tenga como posibles valores las constantes V y F
int logico(int V, int F);

b) Una variable f como un puntero a funcion, (funcion que recibe un puntero a un entero y una matriz de caracteres de 2 filas y 3 columnas y no devuelva nada).
void *(pf)(*int, m[2][3]);

c) Una variable v como un vector de 10 punteros a entero.
int *v[10];

d) Una variable p-v como un puntero a un vector de 8 punteros a float.
float *( *(p-v)[8] );

e) Una variable c como una cadena de caracteres que pueda contener una cadena de longitud 10.
char cad[10], c[cad];

No se si esta regular o muy mal, pero me gustaria saber resolverlo para aclarar mis dudas.

Gracias de antemano!

Páginas: [1]