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

#911
Programación C/C++ / Re: Problema con struct
26 Marzo 2013, 19:05 PM
Cuando declaras un array:
int precio[1];
Indicas el numero de elementos (N = 1) y accedes a ellos mediante los indices 0 .. N-1. Como declaras un array de un solo elemento (no tiene caso) accedes a este mediante "precio[0]".

El elemento "precio[1]" no existe ya que seria el segundo elemento del array.

Un saludo
#912
Programación C/C++ / Re: Dudas Punteros
26 Marzo 2013, 03:53 AM
Cita de: Luchoz95 en 26 Marzo 2013, 02:45 AM
Código (cpp) [Seleccionar]
a=10;
la variable a tiene guardado dos cosas : la direccion "XXXXX" y el valor "10"
La variable "a" se almacena en alguna dirección de memoria (siguiendo el ejemplo esta es XXXXX), el valor ahí almacenado es 10.

Cita de: Luchoz95 en 26 Marzo 2013, 02:45 AM
Código (cpp) [Seleccionar]
int *pt1;
y le asignamos lo siguiente ...
Código (cpp) [Seleccionar]
pt1=&a;
en la variable del puntero se va a guardar la direccion solamente de a osea "XXXXX" el valor no
Correcto. Una variable de tipo "T *" es como cualquier otra con la diferencia que esta almacena direcciones de memoria. Para acceder al objeto apuntado (la variable "a") utilizas "*pt1".

Un saludo
#913
Programación C/C++ / Re: Problema de Collatz
24 Marzo 2013, 03:45 AM
Para conocer el numero de valores en la serie inicializas fuera del bucle un contador con el valor uno, dentro del bucle lo incrementas en una unidad por cada iteracion.

Para conocer el máximo otro contador, este inicia con el numero introducido por el usuario. Dentro del bucle si el siguiente valor de la serie es 3n + 1 verificas si este es el nuevo máximo.

Un saludo
#914
Lo mas sencillo es manejar la moda igual a uno como un caso especial (ya que se deben imprimir todos los números).

En los demás casos utilizas un bucle que itere por todos los elementos menos el primero. Comparas el elemento actual con el anterior, si es igual incrementas el numero de repeticiones y si este es igual a la moda imprimes el numero.

Un programa de ejemplo en C que ejemplifica los dos bucles:
#include <stdio.h>
#include <stdlib.h>

int main (void)
{
   int num[] = {1, 1, 2, 2, 3, 3};
   int num_elem = (int) (sizeof num / sizeof num[0]);
   int moda;
   int reps;
   int i;
   
   /* Calculo de la moda */
   moda = reps = 1;
   for (i = 1; i < num_elem; i++)
      if (num[i] != num[i - 1])
         reps = 1;
      else if (++reps > moda)
         moda = reps;
   printf("moda == %d\n", moda);
   
   /* Impresion de la moda */
   if (moda == 1)
      for (i = 0; i < num_elem; i++)
         printf(" %d", num[i]);
   else {
      reps = 1;
      for (i = 1; i < num_elem; i++)
         if (num[i] != num[i - 1])
            reps = 1;
         else if (++reps == moda)
            printf(" %d", num[i]);
   }
   putchar('\n');
   
   return EXIT_SUCCESS;
}

Debes implementar bucles similares en tu programa en C++ después de las partes donde pides los números y los ordenas.

Un saludo
#915
Cita de: Dacan en 22 Marzo 2013, 19:31 PMHe aqui la solucion:

char texto[50];
printf("\nIntroduce una oracion: ");
scanf(" %[^\n]", texto); 
Utilizar scanf en esa forma no se recomienda porque genera el mismo problema que la función gets: no se puede limitar el numero de caracteres que leerá la función y si este sobrepasa la capacidad del array el programa revienta. Eso se puede evitar utilizando " %49[^\n]".

Si en tu caso fgets no tiene el efecto esperado eso se debe a un error en alguna parte del programa (hay que revisarlo completo) o bien estas intercalando llamadas a scanf con getchar/fgets/etc.

Un saludo
#916
En casos como este por favor no respondas con "no funciona", "no sirve", etc. porque aun cuando se te quisiera ayudar no es posible sin la información suficiente.

Lo mejor aquí es publicar el código fuente completo.

Un saludo
#917
Puedes utilizarla sin problemas con la entrada estándar, para ello utilizas stdin como tercer argumento. Mas o menos así:
char linea[100];

/* ... */

fgets(linea, 100, stdin);

De esa forma lees una linea de texto de un máximo de 100 caracteres.

Un saludo
#918
Cita de: ThronerAXE en 22 Marzo 2013, 02:44 AMPensando un poco en la estetica, y tambien en otra forma de hacerlo, ¿existe algun codigo para que al momento de que en la pantalla me pregunte "Hay otro cliente...?S/N" y yo ingrese un caracter, ese caracter no se vea en la pantalla
Es posible pero debes utilizar una biblioteca especifica de tu compilador (por ejemplo conio o ncurses) o el API de tu SO (por ejemplo la Win32 API).

Cita de: ThronerAXE en 22 Marzo 2013, 02:44 AMOtra duda es, que hay unos codigos que he visto que estan asi:
printf("\n\nHay otro cliente...S/N? ");
fflush(studin);
resp=toupper(getchar();


mi duda es, que en ningun momento veo q guarden el dato ¿ no se deberia usar el scanf para guardarlo en la variable?
Lo hacen: la función getchar obtiene el carácter, este se pasa a mayúsculas con toupper y finalmente se almacena en la variable "resp".

Y disculpa lo repetitivo pero no se recomienda el uso de "fflush(stdin)".

Un saludo
#919
Si un array de estructuras se almaceno en un archivo mediante fwrite debes leerlo con fread. Lo usual es leer un bloque de estructuras y almacenarlo en un array, después de procesarlo lees otro bloque, eso lo implementas mediante un bucle.

Mas o menos así:
#include <stdio.h>
#include <stdlib.h>

#define NOM_ENTRADA  "Entrada.dat"
#define LONG_MAX_CADENA  128
#define MAX_REGS  64

struct reg {
   char nombre[LONG_MAX_CADENA];
   char direccion[LONG_MAX_CADENA];
   struct {
      int dia;
      int mes;
      int año; /* Es a n i o pero el foro lo cambia ... */
   }fnac;
};

int main(void)
{
   FILE *entrada;
   struct reg reg[MAX_REGS];
   size_t num_regs;
   
   if ((entrada = fopen(NOM_ENTRADA, "rb")) == NULL){
      perror(NOM_ENTRADA);
      return EXIT_FAILURE;
   }
   
   while ((num_regs = fread(reg, sizeof(struct reg), MAX_REGS, entrada)) > 0){
   
      /* Procesamos "num_regs" registros */
     
   }
   fclose(entrada);
   
   return EXIT_SUCCESS;
}


Un saludo
#920
Cita de: BJM en 20 Marzo 2013, 14:58 PMEl error se produce en la linea 11: void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas), paso las constantes nfilas y ncolumnas como parametro, es valido?
No. El problema se debe a que el preprocesador actúa primero y al sustituir las macros en la declaración:
#define ncolumnas 2
/* "difine" cuando deberia ser "define" */
#difine nfilas 2

/* ... */

void mostrarvendidos(int venta[][ncolumnas], int nfilas,int ncolumnas);

Esta termina como:
void mostrarvendidos(int venta[][ncolumnas], int 2,int 2);
Por eso el compilador genera el mensaje de error.

Para solucionarlo solo tienes que cambiarla para que coincida con su definición:
void mostrarvendidos(int venta[][ncolumnas]);

Hay otros errores en el programa:

* Uso del operador de comparación "==" cuando debería ser asignación "=":
venta[fila][col]==ocupado;

* En la función "mostrarvendidos" no indicas el indice del elemento a procesar:
if(venta[][ncolumnas]==ocupado){

* El array venta tienes que declararlo en la función main y pasarlo a las otras funciones (falta).

* La variable resp la debes declarar en la función main (falta).

Un saludo