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


 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  {Solucionado} [C] Detectar tres mayúsculas seguidas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: {Solucionado} [C] Detectar tres mayúsculas seguidas  (Leído 2,820 veces)
alvr

Desconectado Desconectado

Mensajes: 6


Ver Perfil
{Solucionado} [C] Detectar tres mayúsculas seguidas
« en: 3 Enero 2013, 19:39 »


Hola, tengo que hacer un programa en el que se escriba la frase y detecte si hay tres mayusculas consecutivas mediante una función. Aquí dejo el enunciado.

Citar
Se introduce por teclado un texto que acaba en un punto. Escribir un programa que nos indique si existen tres letras mayúsculas consecutivas en el texto. Para resolver el problema realizar una función EsMayusc que a partir de un carácter nos devuelva un 1 si el carácter es alfabético mayúscula y devuelva un 0 en cualquier otro caso. No deberán leerse más datos que los necesarios.

Y aquí dejo el código que tengo hasta ahora, pero que claramente no funciona:

Código:
#include <stdio.h>

int esMayus(char c);

void main() {

char letra;

printf("Escribe una secuencia de texto: ");
scanf("%c", &letra);

while(letra != '.') {

if(esMayus(letra) == 1) {

scanf("%c", &letra);

if(esMayus(letra) == 1) {

scanf("%c", &letra);

if(esMayus(letra) == 1) {

printf("Encontrado.");

}

}

}

scanf("%c", &letra);

}

}

int esMayus(char c) {

if(c >= 'A' && c <= 'Z') return 1;
else return 0;

}


« Última modificación: 4 Enero 2013, 10:18 por alvr » En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [C] Problema con bucle
« Respuesta #1 en: 3 Enero 2013, 20:18 »

Hola alvr , tu tienes que introducir un texto no letra a letra por lo tanto el:
Código
  1. scanf("%c",&letra);
No puede ser , ya que estás leyendo una sola letra.Además tienes que declarar un array de carácteres para albergar un texto no una sola letra, así que así no es:
Código
  1. char letra;
Debería de ser así:
Código
  1. char frase[20];/** El 20 lo puedes cambiar por la cantidad de carácteres que quieras **/
Entonces ahora para leer la frase que vas a introducir terminada en un punto debes usar el especificador de formato '%s'(sin las comillas) así:
Código
  1. scanf("%s",&frase);
Pero esta función solo lee palabras. Así que tendrás que lidiar con esta(mejor dicho con la segura):
Código
  1. gets(frase);
Aunque esta función no es muy segura ( echale un vistazo a |Lo que no hay que hacer en C/C++. Nivel basico| ) Esta función se sustituye por fgets:
Código
  1. fgets(frase,20,stdin);
Una vez tienes la frase leída e introducida en el array de carácteres trabajas con punteros o con el índice dentro de los corchetes y vas comprobando. En tu programa el problema principal es que solo lees letras no una frase.La función de comprobar si es mayúscula está bien. Si necesitas más ayuda aquí estamos.


« Última modificación: 3 Enero 2013, 20:20 por avesudra » En línea

Regístrate en
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [C] Problema con bucle
« Respuesta #2 en: 3 Enero 2013, 21:33 »

Hola, tengo que hacer un programa en el que se escriba la frase y detecte si hay tres mayusculas consecutivas mediante una función.
Citar

Citándote: Y aquí dejo el código que tengo hasta ahora, pero que claramente funciona:
Código
  1. #include <stdio.h>
  2.  
  3. int esMayus(char c);
  4.  
  5. void main() {
  6.  
  7. char letra;
  8.    int cont=0;
  9. printf("Escribe una secuencia de texto terminada en punto: ");
  10. scanf("%c", &letra);
  11.  
  12. while(letra != '.') {
  13.  
  14. if(esMayus(letra) == 1)
  15.            cont++;
  16.        scanf("%c", &letra);
  17. }
  18.    (cont==3)? puts ("Encontrado"):puts ("No encontrado");
  19.     return 0;
  20. }
  21. int esMayus(char c) {
  22. if(c >= 'A' && c <= 'Z') return 1;
  23. else return 0;
  24. }
  25.  
Saluditos!. .........  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:
P.D: avesudra el uso de char no implica que debas estar dándole al enter cada vez, pruébalo y lo veras..
« Última modificación: 3 Enero 2013, 21:37 por leosansan » En línea

alvr

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [C] Problema con bucle
« Respuesta #3 en: 3 Enero 2013, 22:06 »

Gracias por la ayuda leosansan pero necesito que compruebe que hay tres mayúsculas seguidas, y por el código que has enviado cuenta las mayúsculas que hay incluso estando separadas.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: [C] Problema con bucle
« Respuesta #4 en: 3 Enero 2013, 23:44 »

Solo es cuestion que hagas algunas modificaciones nada mas, el codigo base te lo hicieron(tampoco pidas todo)


Saludos
En línea

Ahorrate una pregunta, lee el man
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [C] Problema con bucle
« Respuesta #5 en: 3 Enero 2013, 23:45 »

Gracias por la ayuda leosansan pero necesito que compruebe que hay tres mayúsculas seguidas, y por el código que has enviado cuenta las mayúsculas que hay incluso estando separadas.
Comprueba si funciona ahora:
Código
  1. #include <stdio.h>
  2.  
  3. int esMayus(char c);
  4.  
  5. int main() {
  6.  
  7. char letra;
  8.    int cont=0;
  9. printf("Escribe una secuencia de texto: ");
  10. scanf("%c", &letra);
  11.  
  12. while(letra != '.') {
  13. if(esMayus(letra) == 1) {
  14.            scanf("%c", &letra);
  15.                if(esMayus(letra) == 1) {
  16.                    scanf("%c", &letra);
  17.                        if(esMayus(letra) == 1) {
  18.                            scanf("%c", &letra);
  19.                            if(esMayus(letra) ==0)
  20.                                cont++;
  21.                            }
  22.                        }
  23.                    }
  24. scanf("%c", &letra);
  25. }
  26.    if ((cont>=1)) printf ("Encontrado %d veces",cont);
  27.    else puts ("No encontrado");
  28.    return 0;
  29. }
  30.  
  31. int esMayus(char c) {
  32.  
  33. if(c >= 'A' && c <= 'Z') return 1;
  34. else return 0;
  35.  
  36. }
  37.  
Saluditos!. .........  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:
En línea

alvr

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: [C] Problema con bucle
« Respuesta #6 en: 4 Enero 2013, 00:03 »

leosansan, no pide lo mismo, pero gracias de todas formas.

Al final he empezado de nuevo y parece que funciona bien. Aquí dejo el código por si alguno le resulta útil en un futuro.

Código:
#include <stdio.h>
 
int esMayus(char c);
 

void main() {
 
char letra;
int l1, l2, l3, enc = 0;

printf("Escribe una secuencia de texto: ");
scanf("%c", &letra);
 
while(letra != '.' && enc == 0) {

if(esMayus(letra) == 1) {

l1 = 1;
scanf("%c", &letra);

if(esMayus(letra) == 1) {

l2 = 1;
scanf("%c", &letra);

if(esMayus(letra) == 1 && l2 == 1) {

l3 = 1;
scanf("%c", &letra);
enc = 1;

}

}

} else {

scanf("%c", &letra);

}

}

if(l1 == l2 && l2 == l3) printf("Tres mayusculas consecutivas.");
else printf("No hay tres mayusculas consecutivas.");

}
 
int esMayus(char c) {
 
if(c >= 'A' && c <= 'Z') return 1;
else return 0;
 
}
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: {Solucionado} [C] Problema con bucle
« Respuesta #7 en: 4 Enero 2013, 02:12 »

Creo q no hace falta tantos scanf para la lectura, solo reseteando la variable cont a cero cuando no hay 3 consecutivos alcanzaria; algo asi:

Código
  1. while(letra != '.') {
  2.  
  3. if(esMayus(letra) == 1)
  4. {
  5.  cont++;
  6.  if(cont==3)
  7.    consecutivo++;
  8. }
  9. else cont=0;
  10. scanf("%c", &letra);
  11.  
  12. }
  13.   (consecutivo!=0)? printf ("Consecutivos: %d veces\n",consecutivo):puts ("No encontrado");

Saludos

PD: lo creo q no considera es si se ingresan mas de 3 mayusculas consecutivas
En línea

Ahorrate una pregunta, lee el man
zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: {Solucionado} [C] Problema con bucle
« Respuesta #8 en: 4 Enero 2013, 04:35 »

Una forma de hacerlo en C++:
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int esMayus(char c){
  5. if(c>='A' && c<='Z') return 1;
  6. else return 0;
  7. }
  8.  
  9. int main()
  10. {
  11.    string frase;
  12.    do{
  13.    cout<<"Ingrese frase terminada en punto: ";
  14.    cin>>frase;
  15.    }while(frase.size()<3 || frase.find('.')==-1);
  16.    for(size_t i=0; i<frase.find('.')-2; ++i)
  17.        if(esMayus(frase[i]) && esMayus(frase[i+1]) && esMayus(frase[i+2]))
  18.        {
  19.            cout<<"Existen 3 mayusculas seguidas en el texto.";
  20.            return 0;
  21.        }
  22.    cout<<"No existen 3 mayusculas seguidas en el texto.";
  23.    return 0;
  24. }
« Última modificación: 4 Enero 2013, 04:42 por zonahurbana » En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: [C] Problema con bucle
« Respuesta #9 en: 4 Enero 2013, 14:25 »

..................................................

Al final he empezado de nuevo y parece que funciona bien.

Lamentablemente alvr no hace lo que debería ya que cuenta como tres si hay cuatro mayúsculas seguidas, por no decir que tampoco cuenta las apariciones, cosas ambas que en mi código si hacen.
Idem para el código de durasno, aunque él si cuenta las apariciones.

Saluditos!. ............. :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines