elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [DUDA] Función mayúscula a minúscula y viceversa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [DUDA] Función mayúscula a minúscula y viceversa  (Leído 9,260 veces)
yuna88

Desconectado Desconectado

Mensajes: 11


Ver Perfil
[DUDA] Función mayúscula a minúscula y viceversa
« en: 29 Marzo 2014, 16:09 pm »

Hola, buenas tardes,

Tengo que hacer un ejercicio con funciones y tengo que pasar una frase (que ingrese el usuario por teclado) a mayúsculas y minúsculas.

El encabezado de las funciones debe de ser:
Código
  1. void toUpperCase( char frase[ ] )

Dejo el código que llevo realizado hasta ahora:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void pedir_datos(char frase[]);
  5. void toUpperCase(char frase[]);
  6. void toLowerCase(char frase[]);
  7.  
  8. int main()
  9. {
  10.  
  11.    char frase[100];
  12.    pedir_datos(frase);
  13.    printf("Frase original: %s\n",frase);
  14.    toUpperCase(frase);
  15.    printf("Mayuscula: %s\n",frase);
  16.    toUpperCase(frase);
  17.    printf("Minuscula: %s\n",frase);
  18.    getch();
  19.  
  20. system("PAUSE");
  21.   return 0;
  22. }
  23.  
  24.  
  25. void pedir_datos (char frase[])
  26. {
  27. char s;
  28.    printf("Introduce una frase: \n");
  29.    gets(s);
  30. }
  31.  
  32.  
  33. void toUpperCase(char frase[])
  34. {
  35. int s;
  36.    for( ; s!='\0'; s++)
  37.        if(s>='a' && s<='z')
  38.            s-=(char)32;
  39. }
  40.  
  41.  
  42. void toLowerCase(char frase[])
  43. {
  44. int s;
  45.    while(s!='\0')
  46. {
  47.        if(s>='A' && s<='Z')
  48.            s+=(char)32;
  49.        s++;
  50.    }
  51. }

¿Alguien ve porque el programa me falla?

Un saludo y muchas gracias  :-*


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: [DUDA] Función mayúscula a minúscula y viceversa
« Respuesta #1 en: 29 Marzo 2014, 16:24 pm »

Pos hombre, te dedicas a trastear con la variable s y te olvidas del argumento....


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [DUDA] Función mayúscula a minúscula y viceversa
« Respuesta #2 en: 29 Marzo 2014, 16:55 pm »

Tal como lo tienes, amén del despropósito de la variable s, que declaras como char y ya me dirás como un char almacena una cadena, te falta la librería conio.h para el uso de la función getch(). Además todo parece indicar que tanto el getch como el system lo usas para frenar a la consola para que no se cierre, con lo cual intuyo que usas Dev.C++ 4.x y en ese caso es más estándar el uso de la función getchar(), y así te sobraría el getch, el system y las librerías conio y stdlib. En cualquier caso si es correcta mi sospecha, pásate a Dev-C++ 5.x o, mejor aún, a Code::Blocks.

Otro detalle es que llamas a la función toUpperCase tanto para mayúsculas como para minúsculas.

El código funcionando podría ser:


Código
  1. #include <stdio.h>
  2.  
  3. void pedir_datos(char frase[]);
  4. void toUpperCase(char frase[]);
  5. void toLowerCase(char frase[]);
  6.  
  7. int main(){
  8.    char frase[100];
  9.    pedir_datos(frase);
  10.    printf("Frase original: %s\n",frase);
  11.    toUpperCase(frase);
  12.    printf("Mayuscula: %s\n",frase);
  13.    toLowerCase(frase);
  14.    printf("Minuscula: %s\n",frase);
  15.    getchar();
  16.   return 0;
  17. }
  18.  
  19.  
  20. void pedir_datos (char frase[]){
  21.    printf("Introduce una frase: \n");
  22.    gets(frase);
  23. }
  24.  
  25.  
  26. void toUpperCase(char frase[]){
  27.    int i=0;
  28.    for( ; frase[i]!='\0'; i++)
  29.      if(frase[i]>='a' && frase[i]<='z')
  30.            frase[i]-=32;
  31.  
  32. }
  33.  
  34.  
  35. void toLowerCase(char frase[])
  36. {
  37. int i=0;
  38.  while(frase[i]!='\0') {
  39.        if(frase[i]>='A' && frase[i]<='Z')
  40.            frase[i]+=32;
  41.        i++;
  42.    }
  43. }

Aunque no sé por qué me da que de lo que se trataba era de usar punteros.

¡¡¡¡ Saluditos! ..... !!!!




« Última modificación: 29 Marzo 2014, 17:32 pm por leosansan » En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: [DUDA] Función mayúscula a minúscula y viceversa
« Respuesta #3 en: 29 Marzo 2014, 17:11 pm »

¡Hoy amaneció entretenido el foro, muchas dudas, jeje! Ahora mis observaciones. En primer lugar, el uso de getch() (en sistemas Windows) requiere la cabecera <conio.h>

En cuánto a la función de pedir dato, no requieres una cadena auxiliar s [que por cierto en tal caso debería ser declarada como char * y no char], pues gets() debe depositar su dato directamente el frase:

Código
  1. void pedir_datos (char frase[])
  2. {
  3.    printf("Introduce una frase: \n");
  4.    gets(frase);
  5. }

Debes tener cuidado porque en el main(), el arreglo frase debe tener la longitud suficiente para contener cualquier cadena que introduzca el usuario, de lo contrario ocurriría un desbordamiento de memoria. En tu caso, al haber declarado con longitud de 100 creo que está bien (aunque hay maneras más seguras de hacerlo pero no voy a distraerte el tema con eso).

La función toUpperCase() recorre la cadena, restando 32 al código ASCII de cada carácter encontrado, así pasa de minúscula a mayúscula. Una alternativa es usar la función de biblioteca toupper(c), que pasa el carácter c a mayúsculas (requiere la cabecera <ctype.h>). Por cierto, declara el tipo de s en tu código como char * (apuntador a carácter), e inicialízalo al primer caraćter de la cadena. Si no lo inicializas, el compilador tomará un valor por defecto, generalmente cero, y por eso falla tu programa:
Código
  1. void toUpperCase(char frase[])
  2. {
  3.   char * s = frase;
  4.   for( ; *s!='\0'; s++)
  5.      if( *s >= 'a' && *s <= 'z')
  6.         *s -= (char)32;
  7. }

Te explico: s es un apuntador a carácter, o lo que es lo mismo, una cadena en C. Ojo, que s no es el valor del carácter sino un apuntador al mismo. El valor de la letra sería *s. Por eso cambiamos s por *s en tu código, y tras la inspección de cada letra incrementa el apuntador para que "apunte" a la siguiente letra de la cadena. Por eso es ++s (y no ++*s, se incrementa el apuntador, no el valor apuntado, era otro error que tenías). La función de minúsculas quedaría similar:
Código
  1. void toLowerCase(char frase[])
  2. {
  3.   char * s = frase;
  4.   for( ; *s!='\0'; s++)
  5.      if( *s >= 'A' && *s <= 'Z')
  6.         *s += (char)32;
  7. }

Como aditamento (nunca está de más una segunda opción, jeje), una forma de hacer lo mismo con la función de biblioteca toupper() sería:
Código
  1. void toUpperCase(char frase[])
  2. {
  3.   char * s = frase;
  4.   for( ; *s!='\0'; s++)
  5.      *s = toupper( *s );
  6. }

La salida, en cualquier caso, es la misma:
Código:
Introduce una frase: 
holA Mundo
Frase original: holA Mundo
holA Mundo
Mayuscula: HOLA MUNDO
Minuscula: hola mundo
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
yuna88

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: [DUDA] Función mayúscula a minúscula y viceversa
« Respuesta #4 en: 29 Marzo 2014, 18:09 pm »

Hola a todos,

Muchas gracia por vuestra gran ayuda.

Efectivamente el programa que utilizo para programar (valga la redundancia) es Dev-C++ 5.4.2, se que hay software mejor que ese pero es el que nos explican en clase así que lo tenemos que hacer con ese sí o sí.

Nuevamente, daros las gracias por vuestra ayuda desinteresada.

Un saludo  :-*
« Última modificación: 21 Abril 2014, 17:41 pm por yuna88 » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: [DUDA] Función mayúscula a minúscula y viceversa
« Respuesta #5 en: 29 Marzo 2014, 21:47 pm »

"programa que utilizo para programa" normalemnte para distingurlo se llama IDE (ntegrated development environment, entorno de desarrollo integrado) :P
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [DUDA] Función mayúscula a minúscula y viceversa
« Respuesta #6 en: 30 Marzo 2014, 10:03 am »

..................................................
Efectivamente el programa que utilizo para programa (valga la redundancia) es Dev-C++ 5.4.2,
.....................................

Si no me equivoco, si no corregidme, las versiones 5.x  de Dev-C++ ya hacen una pausa de forma automática, con lo que ya está de más el finalizar con un getch, getchar o system, cosa que era necesario en las versiones 4.x.

¡¡¡¡ Saluditos! ..... !!!!




En línea

ismaelv

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: [DUDA] Función mayúscula inicial, mayuscula , minuscula
« Respuesta #7 en: 20 Agosto 2015, 21:29 pm »

Escribir un programa que permita ingresar una frase por teclado. Luego escribir funciones para imprimir la
frase con los siguientes cambios en el uso de mayúsculas:
a. Oración con mayúscula inicial.
b. Oración en minúsculas.
c. Oración en mayúsculas.
Ejemplo:
Ingrese una frase: "El DIA esta Soleado\n"
Mayúscula inicial: "El día esta soleado\n"
Minúsculas : "el día esta soleado\n"
Mayúsculas : "EL DIA ESTA SOLEADO\n"


//ayuda por favor. no se como hacerlo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
convertir txt a mayuscula minuscula mayuscuala...
Programación Visual Basic
4D1cTo 4 5,804 Último mensaje 18 Junio 2006, 15:10 pm
por Hadess_inf
Convertir cadena minuscula en mayuscula
Programación C/C++
delirio 3 13,499 Último mensaje 28 Noviembre 2010, 04:36 am
por delirio
[Python] - Ejercicio de Mayúscula y Minúscula
Scripting
ChicoMaravilla 2 12,542 Último mensaje 3 Diciembre 2010, 02:17 am
por ChicoMaravilla
convertir minúscula a mayúscula « 1 2 »
Programación C/C++
m@o_614 10 47,436 Último mensaje 24 Abril 2017, 12:31 pm
por NikNitro!
Convertir ñ de minuscula a mayuscula y viceversa
Programación C/C++
MaxVC98 1 2,358 Último mensaje 12 Marzo 2016, 22:04 pm
por Stakewinner00
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines