Foros del Web » Programación para mayores de 30 ;) » C/C++ »

lio con programa

Estas en el tema de lio con programa en el foro de C/C++ en Foros del Web. tengo que hacer un programa para clase y no me termina de salir. Consiste en meter una palabra y que a continuación me cambie las ...
  #1 (permalink)  
Antiguo 25/02/2006, 09:57
 
Fecha de Ingreso: junio-2005
Mensajes: 53
Antigüedad: 18 años, 10 meses
Puntos: 0
lio con programa

tengo que hacer un programa para clase y no me termina de salir. Consiste en meter una palabra y que a continuación me cambie las posiciones pares a mayúsculas y las impares a minúsculas y no me sale. Os dejo lo que he hecho hasta ahora que debe de estar mal con el cacao que tengo ahora mismo.
Saludos y grasias
Código:
#include <conio.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

void pasar_a_mayus(char cad[]);  /*prototipo funcion que me hace el cambio a mayúsculas o a minúsculas*/

void main(void)
{
char txt[20];


printf("\nIntroduce una palabra: ");
flushall();
gets(txt);
pasar_a_mayus(txt);
clrscr();
printf("\n\nLa Nueva palabra es %s",txt);
getch();
}

void pasar_a_mayus(char cad[])
{
 int i,j,longi;
 longi=strlen(cad);

 for(i=0;i<=longi;i++)
  {
   cad[i+2]=tolower(cad[i+2]);
   for(j=1; j<=longi; i++);
    {
    cad[j+2]=toupper(cad[i+2]);
    }
  }
 return;
}
  #2 (permalink)  
Antiguo 25/02/2006, 13:05
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Bueno, hisiste un relajo para algo tan simple.

Mira, te recomiendo que uses punteros para tu funcion void pasar_a_mayus(char cad[]); para que asi pases por referencia.

Por otro lado.

Esta bien tu plantemiento de esa funcion solo que ahi te va unas correcciones.

EN el primer for dale algo como esto:

for(i=0; i<longi; i=i+2)
{
cad[i]=tolower(cad[i]);
cad[i+1]=toupper(cad[i+1]);
}
Y con eso ya te debe convertir sin hacer tanta cosa como pusiste.

Saludos
  #3 (permalink)  
Antiguo 25/02/2006, 20:26
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
ademas, dentro del bucle, nunca te convierte la primera letra de la cadena. Ademas corres el peligro de que trates de acceder a una posicion del vector que no existe.
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #4 (permalink)  
Antiguo 26/02/2006, 07:30
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por TolaWare
ademas, dentro del bucle, nunca te convierte la primera letra de la cadena. Ademas corres el peligro de que trates de acceder a una posicion del vector que no existe.
Ya sabemos que estaba mal... No se lo restrieges ;)

PD:No es vector, es array.


Si además quieres acortarlo, "i=i+2" puedes poner "i+=2"
  #5 (permalink)  
Antiguo 26/02/2006, 12:14
Avatar de spike_jr  
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 2
Cita:
for(i=0; i<longi; i=i+2)
{
cad[i]=tolower(cad[i]);
cad[i+1]=toupper(cad[i+1]);
}
A mi parecer esto no puede funcionar, ya que accedes a una posicion más del array que no es correcta.
__________________
Cita:
"La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. Por ahora, gana el universo." by Rich Cook
  #6 (permalink)  
Antiguo 26/02/2006, 13:11
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Bueno, con un poco de condiciones para no acceder a esos de espacios de memoria no preparada quedaria bastante bien.

SAludos
  #7 (permalink)  
Antiguo 26/02/2006, 15:10
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Es fácil: En vez de "i<longi", "(i+2)<longi"
  #8 (permalink)  
Antiguo 26/02/2006, 15:32
Avatar de spike_jr  
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 2
Como no me gusta hacer operaciones dentro de los [] te propongo esta solucion.

Cita:
for(i=0; i<longi; i++)
{
if(i%2==0)cad[i]=tolower(cad[i]);
else cad[i]=toupper(cad[i]);
}
__________________
Cita:
"La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. Por ahora, gana el universo." by Rich Cook
  #9 (permalink)  
Antiguo 26/02/2006, 15:56
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Realmente esas operaciones se transforman en inmediatas en assembler, por lo que sí es recomendable hacerlas. En cambio un módulo al menos es una operación separada.

Por otro lado, es mejor:

Código:
for(i=0; i<longi; i++)
	cad[i] = (i%2==0) ? tolower(cad[i]) : toupper(cad[i]);
  #10 (permalink)  
Antiguo 26/02/2006, 16:04
Avatar de spike_jr  
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 2
Me puedes explicar esa sintaxis?
__________________
Cita:
"La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. Por ahora, gana el universo." by Rich Cook
  #11 (permalink)  
Antiguo 26/02/2006, 16:08
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Deberías conocerla, es parte del estándar C. Aquí está explicado:

http://www.zator.com/Cpp/E4_9_6.htm

No es más que el operador condicional (similar a un if), pero que permite hacer cosas como las que has visto arriba. Tienden a optimizarse mejor.
  #12 (permalink)  
Antiguo 26/02/2006, 16:11
Avatar de spike_jr  
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 2
Ok. Pero es estandar de C, no de C++ verdad?
__________________
Cita:
"La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. Por ahora, gana el universo." by Rich Cook
  #13 (permalink)  
Antiguo 26/02/2006, 16:12
Avatar de spike_jr  
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 2
Disculpa no habia leido bien :p, es de C++
__________________
Cita:
"La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. Por ahora, gana el universo." by Rich Cook
  #14 (permalink)  
Antiguo 26/02/2006, 16:14
Avatar de spike_jr  
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 2
Me sonaba de algo q lei, pero no le di importancia a su utilidad. De hecho no lo he visto nunca en codigos a excepcion de ejemplos en libros.
__________________
Cita:
"La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. Por ahora, gana el universo." by Rich Cook
  #15 (permalink)  
Antiguo 26/02/2006, 16:21
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por spike_jr
Disculpa no habia leido bien :p, es de C++
No... es de C y de C++. Que el manual que te pase sea de C++ da igual, simplemente era la primera referencia en Google.
  #16 (permalink)  
Antiguo 26/02/2006, 16:21
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por spike_jr
Me sonaba de algo q lei, pero no le di importancia a su utilidad. De hecho no lo he visto nunca en codigos a excepcion de ejemplos en libros.
Será porque no has mirado códigos suficientes ;)
  #17 (permalink)  
Antiguo 26/02/2006, 16:27
Avatar de spike_jr  
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 2
nunca se ven los codigos suficientes... jeje
__________________
Cita:
"La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. Por ahora, gana el universo." by Rich Cook
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:35.