• Jueves 14 de Noviembre de 2024, 07:57

Autor Tema:  Duda con la interepretación de este programa.  (Leído 1022 veces)

Cosmos009

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Duda con la interepretación de este programa.
« en: Lunes 9 de Agosto de 2010, 17:53 »
0
Repasando este programa no me he quedado convencido de si lo interpreto correctamente:
#include <stdio.h>
#include <conio.h>

#define LONG_MAX 81
void MinusculasMayusculas(char str[]);
main()
{
   char cadena[LONG_MAX];
   int i = 0;
   printf("Introducir una cadena: ");
   gets(cadena);
   MinusculasMayusculas(cadena);//Aqui main invoca a MinusculasMayusculas y le pasa el argumento 'cadena'.
   printf("%sn", cadena);
   getch();
}
void MinusculasMayusculas(char str[]) //Aqui la matriz str   copia el argumento cadena
{
   int i = 0, desp = 'a' - 'A';
   for( i = 0; str != ''; ++i)                     //se situa en la cadena letra 0, si es distinto de n aumentara a letra 1 , letra 2, etc...
      if(str >= 'a' && str <= 'z') // Si introducimos la 'a' se cumple y seguimos
      str = str - desp;             // el valor actual de i sera 'a' que será =  'a' - 32 = 65 = 'A' transformando así una a una la letras almacenadas
}
Esto es lo que entiendo, os agradeceria que me corrijais, si no es así como va el programa.Tengo dudas sobretodo con el "for".
No quedo muy convencido de esa interpretación
Gracias a todos.




}

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Duda con la interepretación de este programa.
« Respuesta #1 en: Lunes 9 de Agosto de 2010, 19:17 »
0
Casi correcto.

1. void MinusculasMayusculas(char str[]) //Aqui la matriz str copia el argumento cadena

En realidad no se copìa cadena, sino que trabajas directamente con el contenido de la variable cadena, ya que En C y C++, los arreglos se pasan por referencia y no por valor. O dicho en otras palabras, los arreglos en realidad funcionan como punteros, y como tales, se pasan direcciones, no se copian valores.

2. for( i = 0; str != ''; ++i) //se situa en la cadena letra 0, si es distinto de n aumentara a letra 1 , letra 2, etc...

En realidad inicializa el indice en cero, que seria equivalente a ponerte en la letra cero de la cadena como dices, pero como condicion de salida del ciclo for utiliza str != '' (el caracter '' en realidad es el caracter nulo, no el 'n' que es el salto de linea) ya que las cadenas en C y C++ terminan en nulo (''), por lo tanto preguntar si la letra i de la cadena es nulo, es la manera mas eficiente de verificar que llegamos al fin de la cadena.

3. if(str >= 'a' && str <= 'z') // Si introducimos la 'a' se cumple y seguimos

Aqui preguntamos si la letra i de la cadena se encuentra entre el rango 'a'..'z', es decir, si es una letra minuscula, y de ser minuscula, se entra a la condicion para volverla mayuscula.

Con eso espero que te quede mas claro

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Cosmos009

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Duda con la interepretación de este programa.
« Respuesta #2 en: Lunes 9 de Agosto de 2010, 19:46 »
0
Gracias ProfesorX.Si, así me quedo mucho más claro con esas puntualizaciones, muy bien.
Te estoy agradecido, ahora si me quedo convencido.
 :D