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

#61
Cita de: NOIS en  1 Abril 2015, 03:17 AMsolo tienes que usar los comandos de la cmd con la librería windows.h
Para tener acceso al prototipo de la función system basta con incluir el encabezado <stdlib.h>.

¿Porque funciona con <windows.h>? Porque ese encabezado a su vez incluye <stdlib.h>.

Un saludo
#62
Programación C/C++ / Re: operaciones con bit
1 Abril 2015, 04:12 AM
Utilizando Google el segundo vinculo es Wikipedia: Bitwise operations in C.

Un saludo
#63
Programación C/C++ / Re: system ("pause");
30 Marzo 2015, 04:42 AM
Cita de: ductum fusti percusit en 29 Marzo 2015, 22:04 PMSe puede hacer que al poner system ("pause"); dentro de un bucle anidado, haya que poner una palabra o letra específica para que continúe ejecutándolo?
No ya que el comando "pause" solo requiere de la pulsación de una tecla, nada mas.

La operación la tienes que realizar de forma manual:
1) Indicas al usuario que debe introducir un determinado carácter o palabra para continuar.
2) Lees la entrada del usuario.
3) Verificas si es la correcta o no.

Si se trata de un solo carácter puedes leer este con la función getchar, en el caso de una palabra con scanf. Para verificar la entrada si es un carácter simplemente utilizas el operador de comparación "==" mientras en el caso de una palabra utilizas la función strcmp.

Un saludo
#64
Cita de: CooperJames en 29 Marzo 2015, 19:29 PMHe encontrado una función algo peculiar la cual calcula el cuadrado de un determinado numero, hasta ahi todo bien
El problema con esa forma de obtener el cuadrado es que tal vez funcione o tal vez no ya que la expresión genera UB (comportamiento no definido), la explicación en detalle se encuentra en el vinculo cortesía de ivancea96.

Un saludo
#65
Cita de: RGT en 29 Marzo 2015, 07:47 AM
void Funcion(void)
{
   procesamiento......
}


Es necesario el "void" sino necesito recibir ningún valor?, qué es lo correcto?.
Depende.

En una declaración los paréntesis vacíos indican que la función recibe un numero no determinado de argumentos, si la intención es indicar que no recibe argumentos se debe utilizar la palabra reservada "void". Un ejemplo:
void f();      /* El numero de argumentos es indeterminado */
void g(void);  /* El numero de argumentos es cero */


En una definición los paréntesis vacíos indican que la función no recibe argumentos, no es necesario utilizar void para indicarlo. Sin embargo se recomienda utilizar void en las definiciones por simetría (estilo). Un ejemplo:
void f()      /* El numero de argumentos es cero */
{
   /* ... */
}

void g(void)  /* El numero de argumentos es cero */
{
   /* ... */
}


Un saludo
#66
Cita de: sabeeee en 29 Marzo 2015, 01:08 AMPor favor requiero su ayuda para poder terminar este código, es similar al hacha, divide los archivos en 100 bytes pero no funciona como quiero que funcione
Lo primero que debes hacer es indicar de una forma clara y precisa que operación debe realizar el programa (los comentarios en el se deben cambiar en esa misma linea).

Un saludo
#67
Cita de: ulainava en 29 Marzo 2015, 03:03 AMme gustaría q me ayudaran con el paso de parámetro
Los argumentos de una función son los valores pasados en la llamada, los parámetros son las variables locales inicializadas con el argumento (valor) correspondiente.


Cita de: ulainava en 29 Marzo 2015, 03:03 AMeste es el paso por valor| función(tipo m[][TAM]); | lo q yo quiero es el paso por referencia, osea enviarle la dirección de la matriz a una función.
En C los arrays como argumentos generan de forma automática la dirección en memoria de su primer elemento, si tu declaras una función en cualquiera de estas dos formas:
int fn(char a[]);

/* O */
int fn(char a[N]);

La declaración se termina procesando así:
int fn(char *a);

En buen cristiano: no hay necesidad de emular el paso por referencia del primer elemento del array ya que este es automático.

Un saludo
#68
Programación C/C++ / Re: [?]Eliminar nodo
27 Marzo 2015, 15:51 PM
En tu programa utilizas solo la biblioteca estándar de C cuando, por el uso de new, se trata de C++. Si estas aprendiendo C++ enfocate en su biblioteca estándar. En cuanto al uso intercalado de scanf y fgets (el problema similar en C++ aparece con el uso del operador ">>" y getline) hay un montón de temas en la base de datos de los foros, solo es cuestión de utilizar el motor de búsqueda.

También por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

----

Los problemas en su mayoría se encuentran en la función "borrarNodo", el que mencionas se genera si el nodo a eliminar no existe debido a este bucle:
Código (cpp) [Seleccionar]
printf("INTRODUZCA EL ID A ELIMINAR: ");
scanf("%d", &aux->dato);
while (aux->dato != nuevo->dato){
   ant = nuevo;
   nuevo = nuevo->puntero;
}

En el se itera una y otra vez hasta encontrar un nodo con el valor buscado, si eso no sucede se tratara de procesar el nodo después del ultimo (NULL) causando el error que mencionas al realizar la operación (NULL)->puntero.

----

Mira que pensaba poner un listado de los errores en esa función pero, y recalco que no quiero sonar grosero, son demasiados: reservas memoria cuando no es necesario, no revisas si se alcanza el final de la lista, los nombres de las variables son malos ("nuevo" es el puntero para iterar la lista), hay que tener en cuenta variables "globales" que no son necesarias, etc..

La base para eliminar un nodo es:
Código (cpp) [Seleccionar]
void borrarNodo()
{
   if (inicio == NULL)
      puts("Lista vacia");
   else {
      nodo *aux;
      int dato;
     
      puts("Dato a eliminar:");
      scanf("%d", &dato);
     
      if (inicio->dato == dato){
         // Eliminamos el primero
         aux = inicio;
         inicio = inicio->puntero;
         free(aux);
      }else {
         // Eliminamos (si aplica) algun nodo despues del primero
         nodo *p = inicio;
         
         while (p->puntero != NULL && p->puntero->dato != dato)
         p = p->puntero;
         
         // ...
      }
   }
}


Por supuesto no esta completo, falta la parte mas importante y difícil (eliminar un nodo después del primero). Inténtalo tu solo y si tienes problemas te ayudamos.

Un saludo
#69
Para imprimir el registro almacenado en el archivo no necesitas de un bucle, en su lugar basta con una sentencia condicional donde se verifique el valor de retorno de la función (uno en caso de una lectura exitosa). De esta forma:
if (fread(&Persona, sizeof(Persona), 1, Gente1) == 1)
   printf("%s%s%d\n", Persona.Name, Persona.City, Persona.Age);


Un saludo
#70
Cita de: M01535 en 26 Marzo 2015, 17:08 PMalguien tiene idea de por qué el programa me tira los warning: "assignment make pointer from integer without a cast" y al ejecutarlo, cuando va a finalizar el programa, deja de funcionar: "program.exe has stopped working"
Los errores se generan en las llamadas a fopen:
if (Gente1 = fopen("gente1.dat","ab") == NULL){

/* ... */

if (Gente1 = fopen("gente1.dat","rb") == NULL){

El operador "==" tiene una prioridad mayor que "=" por lo que esas sentencias se procesan así:
if (Gente1 = (fopen("gente1.dat","ab") == NULL)){

/* ... */

if (Gente1 = (fopen("gente1.dat","rb") == NULL)){

Por ello la variable almacenara el valor entero cero si fopen tiene éxito y uno en caso contrario.

Para solucionarlo solo tienes que utilizar paréntesis para primero asignar y solo entonces comparar:
if ((Gente1 = fopen("gente1.dat","ab")) == NULL){

/* ... */

if ((Gente1 = fopen("gente1.dat","rb")) == NULL){


Por ultimo evita el uso de gets y fflush(stdin), las razones de ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico|

Un saludo