• Viernes 8 de Noviembre de 2024, 19:54

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.


Mensajes - Carlota

Páginas: [1]
1
C/C++ / Re: Duda - Una cadena contenida en otra
« en: Miércoles 8 de Septiembre de 2010, 22:34 »
No puedo usar dicha funcion, ya que necesito saber hacerlo sin usar string.h
Ademas, el problema es que si continua leyendo y acaba la segunda cadena deberia decir que esta contenida en la primera y no es asi...

2
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?

3
C/C++ / Re: Sucesion Recursividad
« en: Sábado 4 de Septiembre de 2010, 00:48 »
Perfecto! O.O
Entendi muy bien la funcion que has mostrado, no tiene mucha dificultad para comprenderlo.
Ademas, repite solo las veces necesarias para poder hallar si es un numero guay o si no lo es.

En serio, te agradezco muchisimo que me hayas resuelto la duda!  :)

4
C/C++ / Re: Sucesion Recursividad
« en: Martes 31 de Agosto de 2010, 17:42 »
Tenemos la siguiente sucesion ---> 1, 3 ( 1+2 ), 6 ( 1+2+3 ), 10 ( 1+2+3+4 ), ...

Por ejemplo:
Si yo introduzco el numero 4 (al no pertenecer a la sucesion) la funcion recursiva me tendra que devolver un 0 y escribir por pantalla "No es un numero guay"

Y si yo introduzco un 6 (que sí pertenece a la sucesion) la funcion recursiva me tendra que devolver un 1 y escribir por pantalla "Es un numero guay"

No se si esto es lo que no explique bien >.<

5
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!

6
C/C++ / Re: Declaraciones C++
« en: Sábado 28 de Agosto de 2010, 03:02 »
Ahora entendi ^_^, cuando habla de vectores se referia a la dimension que tenia y no habia que poner v[DIM] ni nada por el estilo.

Bueno, creo que las demas estan bien... Gracias por tu paciencia! :D

7
C/C++ / Re: Declaraciones C++
« en: Sábado 28 de Agosto de 2010, 01:35 »
Ahhhhh! vale... ahora entendi lo de tipo enumerado.
Es decir, realmente no tenia nada que ver con lo que puse al principio xDDDD

a) typedef enum{v,f} logico;
Creo que ahora si esta bien.

Una cosa, por ejemplo en este: Una variable p-v como un puntero a un vector de 8 punteros a float.
Me dice que una variable p-v se encuentra como un puntero --- [es decir, seria: * (p-v) ], a un vector de 8 [aqui tengo dudas... cuando se refiere a un vector habria que poner *(p-v) v[8] no?? punteros [ahora seria *(*(p-v) v[8]) ] a float. [y terminaria float *(*(p-v) v[8]) ]

Supongo que tienes razon con lo de que no se encuentran declaraciones como esta de forma rutinaria, pero me gustaria encontrar las pequeñas diferencias que hay al hablar de punteros, arrays y funciones en este tipo de declaraciones (tambien es porque este ejercicio me llamo la atencion)... muchas gracias por la explicacion que me has dado, te lo agradezco mucho!

8
C/C++ / Re: Declaraciones C++
« en: Jueves 26 de Agosto de 2010, 22:08 »
Le he estado dando muchas vueltas al mensaje que has dejado aqui sobre wikipedia y la verdad esque a lo unico que he podido llegar es a esto:

a) int logico (int v, int f);

b) void *(fp)(int *, m[2][3]);

c) int * v[10]

d) float * (*(p-v) v) [8]

e) char c[10]

Me diras que no lo he cambiado mucho, pero esque con lo que me has dejado no soy capaz de hacer mas nada... no se donde encontrar informacion sobre declaraciones asi con tipos enumerados, vectores o cadenas :(
Al menos espero que haya alguna declaracion bien T_T

9
C/C++ / Re: Declaraciones C++
« en: Sábado 21 de Agosto de 2010, 01:23 »
Como va a ser una tarea si no estan las facultades abiertas en verano??... es un ejercicio que no se resolver :S

EI: no en todo el mundo es verano  :rolleyes:

Tan solo queria que me dijerais si las soluciones se encaminan a lo que he escrito y que me dierais alguna aclaracion de como habeis llegado a las soluciones para saber hacer mas ejercicios como este...

10
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]