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

#821
Programación C/C++ / Re: ayuda en c++
30 Abril 2013, 14:40 PM
Si se trata de generar un numero como ya te comentaron puedes utilizar las funciones srand para inicializar la semilla y rand para generar el siguiente numero aleatorio, los prototipos de ambas funciones se encuentran en el encabezado <cstdlib>.

En el caso de C basta con utilizar sprintf. Por ejemplo:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
   char *pref[] = {
   "05",
   "06",
   "08"
   };
   int num;
   char codigo[7];
   
   srand((unsigned) time(NULL));
   
   sprintf(codigo, "%s%04d", pref[rand() % 3], rand() % 10000);
   printf("%s\n", codigo);
   
   return EXIT_SUCCESS;
}


En el caso de C++ (C++98) hay algunos problemas ya que este no provee una función para la conversión de un entero a cadena
(en su lugar se debe utilizar un objeto de la clase stringstream). Con el nuevo estándar de C++ (C++11) se puede utilizar to_string.

Un saludo
#822
En esa función no tienes porque modificar la variable sw, como ya te comente su uso no es necesario. Para imprimir los valores como una pila (primero en entrar, ultimo en salir) solo tienes que procesar los elementos empezando por el ultimo:
Código (cpp) [Seleccionar]
void mostar_pila(pila &p)
{
   if (p.tope == 0)
      cout << "Pila vacia" << endl;
   else
      for (int j = p.tope; j > 0; j--)
         cout << p.info[j - 1] << endl;
}


Pero, honestamente, no es una buena idea. En su lugar debes seguir la convención y procesar sus elementos solo en base a las funciones push y pop (apilar y desapilar en tu caso).

Un saludo
#823
Si solo respondes "ya esta pero no funciona" es difícil ayudarte.

En su lugar publica el código fuente actualizado junto con una descripción de los problemas que todavía existen en el programa. Y cuando publiques código fuente utiliza las etiquetas de código.

Un saludo
#824
Programación C/C++ / Re: Urgente C++
28 Abril 2013, 14:11 PM
Para la lectura del carácter utiliza el objeto cin y el operador ">>".

Para buscar el carácter en el array basta con un bucle que se repita mientras el elemento del array no sea igual a '\0' (el delimitador de la cadena) y no sea igual al carácter buscado.

Un saludo
#825
Como ya te comentaron si tienes un problema explicalo a detalle y por favor utiliza las etiquetas de código ya que si no lo haces el foro interpreta de forma incorrecta algunas partes del código fuente (el caso mas conocido es el texto en cursiva).

En cuanto al programa:

* No necesitas de la variable global "sw" en su lugar el numero de elementos (el campo "tope") indica si la pila esta vacía.

* En la función "apilar" incrementas el contador y después agregas el valor:
Código (cpp) [Seleccionar]
p.tope++;
p.info[p.tope] = valor;

Esta mal ya que debe ser al revés.

* En la funcion "desapilar" utilizas el operador de asignación "=":
Código (cpp) [Seleccionar]
if (sw = 0){
Cuando deberías utilizar el operador de comparación "==".

Un saludo
#826
Cita de: Onigiri en 26 Abril 2013, 17:06 PMla cuestion es que pese a las modificaciones aun no he podido hacer que funcione.
Cuando eso suceda publica el código fuente completo y actualizado, si no lo haces no es posible solucionar el problema.

Cita de: Onigiri en 26 Abril 2013, 17:06 PMPor cierto el " ; " siempre va en la úlmo lugar cierto?
Correcto. El carácter ';' indica el final de una sentencia en los lenguajes C y C++.

En cuanto al programa con los cambios que te indique funciona correctamente:
Código (cpp) [Seleccionar]
#include <iostream>
using namespace::std;

#define Td 500
#define Tn 800

int main()
{
   char t;
   char cont;
   int d, h;
   
   do {
      cout << "Ingresar Dia de Trabajo (1=Lunes; 2=Martes(..)) : ";
      cin >> d;
     
      cout << "Ingresar Turno (d/n) = ";
      cin >> t;
     
      cout << "Ingresar Horas de trabajo = ";
      cin >> h;
     
      cout << "Jornal = " << ((d != 7 && t == 'd') ? (h * Td) : (d == 7 && t == 'd') ? (h * (200 + Td)) : (d != 7 && t == 'n') ? (h * Tn) : (h * (300 + Tn)));
      cout << endl << endl;
     
      cout << "Continuar? (S/N)";
      cin >> cont;
   }while (cont == 's' || cont == 'S');
   
   return 0;
}


De nuevo si continúan los problemas debes indicar cuales son.

Un saludo
#827
Cita de: NathanD en 26 Abril 2013, 17:11 PMtengo que hacer una lista enlazada simple en la que los elementos que se insertan, sea de una forma ordenada (de menor a mayor).
La forma mas sencilla es separando los tres casos:
A) Lista vacía.
B) Inserción como primer elemento.
C) Inserción después del primero.

Un programa de ejemplo basado en el tuyo:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct lista {
   int numero;
   struct lista *siguiente;
};
typedef struct lista LISTA;

LISTA *meterElementoOrdenado(int num, LISTA *lista);

int main(void)
{
   LISTA *primero = NULL;
   LISTA *p;
   LISTA *siguiente;
   int i;
   
   srand((unsigned) time(NULL));
   
   for (i = 10; i > 0; i--)
      primero = meterElementoOrdenado(rand() % 10, primero);
   
   for (p = primero; p != NULL; p = p->siguiente)
      printf("%2d", p->numero);
   putchar('\n');
   
   for (p = primero; p != NULL; p = siguiente){
      siguiente = p->siguiente;
      free(p);
   }
   
   return EXIT_SUCCESS;
}

LISTA *meterElementoOrdenado(int num, LISTA *lista)
{
   LISTA *nuevo = malloc(sizeof *nuevo);
   
   if (nuevo == NULL){
      fputs("Error con malloc!", stderr);
   }else {
      nuevo->numero = num;
     
      if (lista == NULL || lista->numero > num){
         nuevo->siguiente = lista;
         lista = nuevo;
      }else {
         LISTA *p = lista;
         
         while (p->siguiente != NULL && p->siguiente->numero <= num)
            p = p->siguiente;
         
         nuevo->siguiente = p->siguiente;
         p->siguiente = nuevo;
      }
   }
   
   return lista;
}



Una forma mas corta y que evita los casos especiales pero a cambio es mas complicada e ineficiente es:
LISTA *meterElementoOrdenado(int num, LISTA *lista)
{
   LISTA *nuevo = malloc(sizeof *nuevo);
   
   if (nuevo == NULL){
      fputs("Error con malloc!", stderr);
   }else {
      LISTA **p = &lista;
      nuevo->numero = num;
     
      while (*p != NULL && (*p)->numero <= num)
         p = &(*p)->siguiente;
     
      nuevo->siguiente = *p;
      *p = nuevo;
   }
   
   return lista;
}


Un saludo
#828
Cita de: flony en 26 Abril 2013, 05:57 AMpero debe ser en realidad la referencia a un puntero especifico, en la unidad de memoria que guarda un espacio especifico para ese tipo de variable, recuerda que cada tipo de variable tiene una cantidad de bite distintos...
Las funciones de entrada y salida con formato (printf, scanf, etc.) son funciones con un numero variable de argumentos (variadic functions) y el numero de estos esta dado por el numero de especificadores como "%d", "%s", etc.

En el caso de las funciones de entrada scanf, fscanf y sscanf todos sus argumentos son punteros pero no estoy seguro si te refieres a eso.

¿Puedes por favor aclarar tu pregunta?

Un saludo
#829
* Cambia de compilador. Para recomendaciones utiliza el motor de búsqueda de los foros.

* Cuando utilizas el espacio de nombres estándar (std) debes indicarlo o, en el peor de los casos, utilizar la sentencia:
Código (cpp) [Seleccionar]
using namespace::std;
Antes de cualquier uso.

* En el calculo del jornal te falta el ';' para indicar el final de esa sentencia.

* La condición del bucle esta mal, esta es:
Código (cpp) [Seleccionar]
while (d < 0);
En buen cristiano se traduce a "mientras el día sea menor que cero". Debes cambiarlo para que se ejecute mientras el día sea valido (mayor o igual a 1 y menor o igual a 7):
Código (cpp) [Seleccionar]
while (d >= 1 && dia <= 7);

Un saludo
#830
Programación C/C++ / Re: ayuda con textos
26 Abril 2013, 15:28 PM
Cita de: JaviWar en 26 Abril 2013, 13:14 PMprintf("El porcentaje de pelotas blancas es del: %g %% Aprox\n", i+1, porcentaje );
Un error en esa llamada es tener tres argumentos mientras que la cadena de formato solo tiene un especificador: "%g" (la secuencia "%%" no cuenta).

Cita de: JaviWar en 26 Abril 2013, 13:14 PM¿Hay alguna manera de poder guardar de esa manera el texto en un char o lo que sea?
Utiliza sprintf, esta en lugar de enviar la cadena con formato a la salida estándar la almacena en el array indicado por su primer argumento. Si necesitas ejemplos sobre ella solo tienes que utilizar el motor de búsqueda de los foros.

Un saludo