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

#581
Programación C/C++ / Re: Problema de tipos C
22 Noviembre 2013, 18:11 PM
Como ya te indico ivancea96 el error se debe al tipo de retorno de la función "leer" y el argumento que espera la función "imprimir".

La función "leer" debe recibir como argumento el nombre del array y retornar el mismo (es en realidad un puntero, eso ya lo veras mas adelante):
struct persona *leer(struct persona persona[])
{
   int i;
   
   for (i = 0; i < NUM_PERSONAS; i++){
      /* ... Lectura ... */
   }
   
   return persona;
}


La función "imprimir" recibe ese puntero y retornar nada (void):
void imprimir(struct persona persona[])
{
   int i;
   
   for (i = 0; i < NUM_PERSONAS; i++){
      /* ... Escritura ... */
   }
}


Por ultimo en la función main debes declarar el array, lo usual es indicar el numero de elementos con una macro:
#include <stdio.h>
#include <stdlib.h>

#define NUM_PERSONAS 2

/* ... */

int main(void)
{
   struct persona persona[NUM_PERSONAS];
   
   imprimir(leer(persona));
   
   return 0;
}


Ademas deberías manejar el sexo como una variable de tipo char ('M', 'F', etc.). También debes evitar el uso de gets y fflush(stdin), mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
#582
Supongo es un error de ortografía ya que el nombre correcto de la variable de entorno es "PATH".

Si tienes MS Windows XP otras dos opciones son Cygwin y MS Visual C++ 2008 Express (parte de la versión gratuita Visual Studio 2008).

Un saludo
#583
Programación C/C++ / Re: buscar en un fichero c++
22 Noviembre 2013, 03:02 AM
El programa hay que rescribirlo desde cero ya que de C++ tiene bien poco, casi todo es C. Y como ya te comente no debes utilizar gets como tampoco fflush(stdin), por favor lee la pagina |Lo que no hay que hacer en C/C++. Nivel basico|

No necesitas "vaciar" una variable, solo tienes que utilizar un objeto de la clase string para leer ahí la palabra verificando que la lectura fue exitosa, nada mas. Por ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <string>
using std::string;

int main()
{
   cout << "Cuantas palabras? ";
   int num_pals;
   cin >> num_pals;
   
   for (int i = 0; i != num_pals; ++i){
      cout << "Teclea la palabra: ";
      string palabra;
      if (cin >> palabra)
         cout << "La palabra " << (i + 1) << " es " << palabra << endl;
      else
         break;
   }
   
   return 0;
}


Un saludo
#584
Programación C/C++ / Re: copiar vectores de enteros
22 Noviembre 2013, 01:57 AM
En C para copiar bloques de memorias utilizas las funciones memcpy y memmove, los prototipos de ambas funciones se encuentran en el encabezado <string.h>

Un saludo
#585
Programación C/C++ / Re: buscar en un fichero c++
21 Noviembre 2013, 02:49 AM
* En buen plan lo primero que debes hacer es mejorar tu ortografía, si no entendemos el mensaje no es posible ayudar a resolver el problema.

* Cuando publiques código fuente por favor utiliza las etiquetas de código. Estas se agregan mediante el cuadro desplegable con el texto "GeSHi" en la pagina de composición de mensajes, solo tienes que seleccionar ahí el lenguaje (C, C++, etc.).

* No utilices la función gets como tampoco fflush(stdin). Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|

----

En C++ puedes utilizar la clase string y la funcion getline para leer cada una de las lineas de texto que componen un archivo.

Un saludo
#586
Otra forma mas sencilla (en mi opinión) es declarar un array de ocho elementos, uno apara cada tipo de maquina. Todos ellos se inicializan a cero para indicar el total (inicial) de maquinas arrendadas:
Código (cpp) [Seleccionar]
// Maquinas arrendadas segun su tipo, por simplicidad hay un elemento adicional
int tipo_arrendado[9] = {0};


Primero debes validar que "opcMaq" este en el rango indicado (1 .. 8), si es así para conocer si la maquina ha sido arrendada basta con verificar el valor de "tipo_arrendado[opcMaq]" que es el total de maquinas arrendadas de ese tipo.

Y por supuesto cuando se alquila una maquina debes incrementar el contador correspondiente.

En cuanto al código fuente como el enunciado es uno donde se pide completar el programa lo políticamente correcto es que lo intentes tu primero, nosotros te ayudamos después.

Un saludo
#587
Programación C/C++ / Re: piladinamica caracteres
20 Noviembre 2013, 03:17 AM
Lo primero a cambiar son los nombres de los encabezados (los correctos son <cstdio> y <cstdlib>) y no deberías utilizar la biblioteca conio de Borland. Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|.

En C++ no necesitas de typedef para eliminar el uso de "struct" en una declaración, puedes utilizar sin problemas:
Código (cpp) [Seleccionar]
struct nodo { // nodo == etiqueta de la declaracion
   string dat[n];
   struct nodo *p;
}

// La declaracion solo requiere la etiqueta
nodo *tope = NULL;


El problema principal se debe a la declaración del nodo:
Código (cpp) [Seleccionar]
typedef struct nodo
{
    string dat[n];
    struct nodo *p;
}nod;
nod *tope=NULL;

Con el indicas que cada nodo contendrá un array de cadenas y, al parecer, esa no es la intención. Si se trata de almacenar una cadena por nodo solo necesitas un objeto de tipo "string".

En la función que sigue (la función "push") tratas de asignar con:
Código (cpp) [Seleccionar]
nvo->dat[n] = ndat;
Eso no funcionara porque los indices validos para el array son 0 .. n-1, el elemento n no existe.

Y en la función "pop" tratas de imprimir el array:
Código (cpp) [Seleccionar]
cout << "\n Sale: " << aux->dat << endl;
Eso no tendrá el efecto indicado, en su lugar imprimirá la dirección del array (funcionaria correctamente si "dat" no fuera un array).

Bueno, primero tienes que corregir esa parte del programa.

Un saludo
#588
Programación C/C++ / Re: Algoritmo en C con acción
19 Noviembre 2013, 18:12 PM
Para conocer si el numero (id del producto) termina en 9 puedes utilizar el operador de modulo.

El calculo del descuento depende de si este aplica solo al segundo o por pares.

* Si aplica solo al segundo verificas si el numero de unidades es mayor o igual a dos, si eso sucede al costo total le restas ".5 * precio_unitario".

* Si aplica por pares (por ejemplo compras cinco artículos con el descuento aplicando a dos de ellos) debes utilizar:
descuento = (cantidad / 2) * .5 * precio_unitario
Donde "cantidad / 2" es una división entera (los decimales se descartan).

Un saludo
#589
Programación C/C++ / Re: Problema en ejecucion
19 Noviembre 2013, 02:43 AM
En la función "crear_stack_corchete" retornas la dirección en memoria de una variable local:
stack *crear_stack_corchete()
{
   stack * corchete;
   stack l_corchete;
   corchete = &l_corchete; /* <== */
   corchete->size_algo = 0;
   return corchete; /* <== */
}

No es valido porque la memoria utilizada por todas las variables locales se libera al finalizar la función. Mismo caso con las funciones "crear_stack_llave" y "crear_stack_parentesis".

En la función main no debes convertir el valor de retorno de fgetc (de tipo int) al tipo char:
caracter = (char) fgetc(archivo);
Porque la función fgetc retorna un valor no negativo (el carácter leído) o bien un valor negativo (EOF) para indicar error o fin de archivo. El numero de valores posibles (cualquier carácter, EOF) no es posible almacenarlo en una variable de tipo char (por razones obvias), debe ser int.

Por ultimo si la intención es crear un verificador de sintaxis muy básico (comillas, paréntesis y corchetes balanceados) solo necesitas de una pila.

Un saludo
#590
Programación C/C++ / Re: secuencia digital
19 Noviembre 2013, 02:31 AM
Cita de: kikian94 en 18 Noviembre 2013, 18:59 PMhe hecho el programa pero me da error y no lo encuentro, creo que esta todo bien, pero siempre me dice caracter erroneo
Para verificar que el programa funcione correctamente debes publicar el código fuente completo.

En cuanto al fragmento que pones no deberías utilizar gets y fflush(stdin). Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|

Y en la función "estadisticaSecuencia" asumes que la cadena pasada como su primer argumento incluye el carácter '\n' pero eso no sucederá porque lees la linea con gets (esta lee una linea almacenándola en la dirección indicada pero sin incluir el avance de linea).

Un saludo