Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

#1451
Deficiencias en el programa hay muchas empezando por la definición de la función principal y el uso de conio. También el uso de las macros es ... inusual. Ellas las debes utilizar para darle claridad al programa, no para moldearlo al gusto. Por favor lee los temas fijos del foro.


Errores importantes hay varios, primero declaras un array con 100 elementos y a continuación limitas el uso de estos a solo 10. En su lugar utiliza las macros como dios manda, define una y utilizala en todo el programa para indicar el numero de elementos en la pila:
#define NUM_ELEM  100

/* ... */

int pila[NUM_ELEM];

/* etc */



En cuanto a las dos operaciones básicas en una pila estas son push y pop con un indicador de posición con un valor inicial a cero. Ese es el problema en tu programa.

La operación push debería ser:
1) Agregar el elemento
2) Incrementar el contador

La operación pop debería ser:
1) Decrementas el contador
2) Sacas el elemento

Al hacerlo así el contador de posición indicara en todo momento el numero de elementos en la pila.

Un saludo
#1452
En ese programa asumes, por alguna razón que esto:
if (a<c, b>d)
Es valido y hace lo que tu esperas de el (No es así).

En C la coma es un operador secuencial, este evalúa su expresión a la izquierda y descarta su resultado. A continuación se evalúa la expresión a su derecha y ese es su resultado. Por ejemplo esto:
2, 5
Es una expresión y su resultado es 5.


En tu caso esto:
if ( a < c, b > d)
Es equivalente a:
if ( b > d )


Lo que debes hacer es utilizar los operadores lógicos AND/OR. Cual utilizar depende del caso y su explicación la puedes encontrar en un buen libro (Revisa los temas fijos del foro).

Un saludo
#1453
No es necesario almacenar los caracteres ni el contador ya que lo unico que se hace con ellos es imprimirlos. Tomando tu ejemplo:
x = 0;
w = 0;
while (cad[x] != '\0'){
  if (cad[x] == 'a' || cad[x] == 'A' || cad[x] == 'e' || cad[x] == 'E'
     || cad[x] == 'i' || cad[x] == 'I' || cad[x] == 'o' ||
     cad[x] == 'O' || cad[x] == 'u' || cad[x] == 'U'
  )
     printf("%d", ++w);
  else
     putchar(cad[x]);
 
  x++;
}
putchar('\n');


Edito: no puede utilizarse la función "putchar" para imprimir el numero de vocales, hay que utilizar printf. Mea culpa. Ya esta corregido

Un saludo
#1454
Cita de: n_n en 30 Octubre 2011, 02:04 AMesto identificaria las vocales y en que posicion estan pero nose como hacer para enumerarlas
Pues ya lo estas haciendo. Basta con imprimir el valor de la variable "w" justo despues de su incremento.

Un saludo
#1455
Programación C/C++ / Re: programa con ficheros
25 Octubre 2011, 05:26 AM
Cita de: tumayy en 25 Octubre 2011, 00:57 AMno estan porque no me salen, por eso pido ayuda para terminarlo
Como ya te habia comentado en tu otro tema primero debes indicar exactamente que entiendes por registro y darnos un ejemplo de como estan almacenados estos en el archivo de texto.

Si no es asi sera dificil (sino imposible) ayudarte. Mas todavia, ese programa se ve muy mal.

Por ejemplo en la funcion "consulta" primero pides el numero de registro y a continuacion tratas de colocarte en la posicion "n * sizeof(long)". Si "n" es el numero de registro es dificil pensar que la informacion de cada uno de estos se almacena en "sizeof(long)" caracteres y es todavia mas complicado si, en realidad, estamos hablando de un archivo de texto.

Un saludo
#1456
Programación C/C++ / Re: Ayuda!
25 Octubre 2011, 05:20 AM
Aparte de lo ya comentado el nombre correcto de la funcion es "strlen" y antes de utilizarla debes incluir el encabezado <string.h>.

Y para conocer si un caracter es alfabetico puedes utilizar la funcion isalpha, antes de cualquier uso de esta debes incluir el encabezado <ctype.h>.

Un saludo
#1457
Cita de: raquelsg88 en 24 Octubre 2011, 23:00 PMHe hecho esto y si me corta la palabra, pero a nada que escriba una frase, los espacios no los coge y se keda colgado el programa, q puedo hacer?
Como ya te comento do-while debes utilizar fgets y tambien debes verificar que el numero indicado po el usuario (la posicion) sea menor que 25:
puts("Introduce la cadena de caracteres:");
fgets(tira, 25, stdin);

puts("Introduce un numero:");
if (scanf("%d", &n) == 1 && n >= 0 && n < 25)
   tira[n]='\0';


----

Cita de: Riki_89D en 24 Octubre 2011, 23:35 PM
Y con un bucle for?¿

...

en este caso el programa devuelve "Holaaaa b" (asta el 9 caracter por que es un 9 el numero ingresado :=))

y para recojer el texto tengo entendido que gets() va muy bien,yo uso "cin" aun que este no va tan bien,hay que vaciar siempe el buffer!
Si revisamos con cuidado el programa de raquelsg88 este es en lenguaje C.

Hay varios problemas con la solucion que propones: en C++ es un error modificar una cadena literal (la cadena "Holaaaa buenos dias") y no se aconseja el uso de la funcion gets (eso se describe a detalle en los temas fijos del foro).

Un saludo
#1458
Siguiendo la recomendacion de do-while
un ejemplo sencillo del uso de stringstream y string para crear el nombre en la forma "Nombre_N.txt" es:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <sstream>
using std::stringstream;

#include <string>
using std::string;

int main()
{
for (int i = 0; i != 5; ++i){
stringstream ss;
ss << i;
string nombre = "Nombre_" + ss.str() + ".txt";
cout << nombre.c_str() << endl;
}

return 0;
}


Un saludo
#1459
Programación C/C++ / Re: listas enlazadas
24 Octubre 2011, 03:54 AM
Cursos de calidad sobre listas vinculadas y arboles binarios (pero por desgracia todos en ingles) se pueden descargar de la pagina Stanford CS Education Library.

Un saludo
#1460
Cita de: Principios en C en 24 Octubre 2011, 01:01 AMEso imagine pero no puedo avanzar ya que no se manejar los apuntadores, se me hacen muy laboriosos..
Puedes empezar declarando un montón de arrays, uno por cada campo de la estructura que no te dejan utilizar: apellidos, nombre, etc. También necesitas un array de arrays de NxM donde N es el numero de alumnos y M es 5 (sus calificaciones).

Una vez lo tengas funcionando correctamente puedes sustituir los arrays por reservas dinámicas de memoria cortesía de la función malloc.

----

Cita de: do-while en 24 Octubre 2011, 02:34 AMSiempre puedes simular los struct con punteros y vectores. Por ejemplo el siguiete struct:
struct cosa
{
    char letra;
    int numero;
    char cadena[10];
};


Puedes pasarlo a un vector asi:
char cosa[sizeof(char) + sizeof(int) + 10 * sizeof(char)]
de esta forma tienes espacio para almacenar todos los datos del struct.
Quiero recalcar que lo digo buen plan: esa aproximación tiene sus problemas. Cuando utilizamos una estructura no debemos preocuparnos de los bytes de relleno para cumplir los requisitos de alineación de los diferentes campos, eso es tarea del compilador.

Pero si es una implementación manual como en este caso tal vez funcione o tal vez no (ese es el problema). Si "cosa + 1" cumple con los requisitos de alineación del tipo int no hay problema pero si no es así ...

Cita de: do-while en 24 Octubre 2011, 02:34 AMprintf("%d",cosa[sizeof(char)]);
Esa linea imprime el valor numérico del carácter "cosa[1]", para tratarlo como un int se debe utilizar:
printf("%d", *(int *)(cosa + 1));

Un saludo