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 - durasno

#231
printf(bloques[0][0])    ????????????????????????
#232
Hola! creo haber encontrado el error :)

La funcion fwrite, como ya sabes recibe 4 argumentos, el primero es un puntero que apunta a lo que se va a guardar y el segundo especifica el tamaño de lo que se guarda, aqui el problema. Tomemos como ejemplo pricemart.blanco:
blanco es una matriz de struct pasillos entonces blanco[f][c] es UNA struct pasillos. Por lo tanto si haces un sizeof(pricemart.blanco) y sizeof(pricemart.blanco[f][c]) tenes dos tamaños totalmente diferentes, el primero devuelve el tamaño de la matriz y el segundo el de una struct pasillos (en otras palabras estas guardando en un bloque de memoria grande algo muy chiquito)
Resumiendo deberia ser asi:
for (f=0; f<maxi; f++){
             for (c=0; c<maxi; c++){
             fwrite(&pricemart.blanco[f][c], sizeof(struct pasillos), 1, bodega);
         }
         }


Creo(no estoy seguro) que tambien funcionaria asi:
fwrite(pricemart.blanco, sizeof(pricemart.blanco), 1, bodega); // sin los for, sin nada


Si te funciona alguno de los dos, acordate de usar el mismo concepto para fread

Saludos
#233
Hola! lo que subiste no funciona xq anterior siempre es igual a NULL, nunca entra al else; pero no esta del todo mal...

De todas formas el error principal esta en que no tenes claro el concepto de pasaje por valor y por pseudoreferencia. A la funcion vos le pasas el puntero lst, es decir en la llamada haces EliminarNodos(lst, maximo); // pasas por valor a lst
El problema es que si vos tratas asi a lst cualquier modificacion que hagas en la funcion(es decir haces q apunte a otro lado) cuando retornes al main no va a tener efecto... Para resolver esto tenes q pasar a lst por pseudoreferencia
// en la llamada
EliminarNodos(&lst, maximo); // paso la direccion de lst

y en la funcion:
void EliminarNodos(NODO **lst, int  maximo) // se trata como un puntero a puntero
{ }



Entonces, el codigo seria mas o menos asi:
void EliminarNodos(NODO **lst, int maximo){
   NODO *indice=NULL, *anterior=NULL;
  int flag;
   if(*lst!=NULL){
       indice=*lst;

       while((indice)!=NULL){
            flag=0;
           if((indice->num)>=maximo){
               if(indice==*lst){ // es decir es el inicio de la lista
                   *lst=indice->sig; // ahora el inicio de la lista es el siguiente
                     free(indice);
                     indice=*lst;
               }else{ // no es el inicio
                   anterior->sig=indice->sig;
                   free(indice);
                   indice=anterior->sig;
               }
             flag=1;
           }
           if(!flag) { /* nose borran nodo */
              anterior=indice;
              indice=anterior->sig; /* cambia al sig nodo */
            }
       } /* fin del while */
   }
}

Fijate q solo agregue un par de cosas a lo q tenias(ya q no estaba tan mal). Te falto considerar que pasa cuando indice->num>=maximo es falso, el bucle se vuelve infinito ya que no cambias de nodo, te falto agregar indice=anterior->sig; pero para q esto funcione bien agregue un flag. Cuando flag=0 es porque no se cumplio que num>=maximo(nose borran nodos) entonces se ejecuta
           if(!flag) {
              anterior=indice;
              indice=anterior->sig; /* cambia al sig nodo */
            }

de lo contrario flag=1 nose ejecuta lo anterior mencionada...

Si funciona lo que puse, analiza porque lo hice asi teniendo en cuenta todas las consideraciones. Saludos
#234
No se hacen tareas

Saludos
#235
hola!
CitarResulta que estoy haciendo un programa donde me pida la cantidad con número y me de en la pantalla la cantidad con letras
te referis a hacer esto, se ingresa el numero 10 y en pantalla se imprime "diez"??? Si es asi no es un ejercicio facil, te aconsejaria que lo hagas mas adelante cuando tengas un poco mas de pratica... Igual si buscas bien en el foro alguien habia preguntado algo asi, e incluso se postio un programa sobre eso


Saludos
#236
Hola! las estructuras, a diferencia de los arreglos, se pueden asignar unas a otras. Esto:
                                aux.c=ALUMNO[l].c;
                                              strcpy(aux.nombre,ALUMNO[l].nombre);
                                              aux.calificacion=ALUMNO[l].calificacion;
                                              aux.lista=ALUMNO[l].lista;
                                              aux.dia=ALUMNO[l].dia;
                                              aux.mes=ALUMNO[l].mes;
                                              aux.ano=ALUMNO[l].ano;

equivale a:
aux=ALUMNO[l];

Saludos

PD: el ordenamiente lo hace bien??? sino busca el metodo de la burbuja, que es uno de los mas faciles de entender
#237
Hola! usa la etiqueta GeSHi para poner codigo, tal ves asi la gente tenga mas ganas de responder
#238
Hola!
CitarEl problema ahora reside que al ejecutarse el programa lo que imprime de la variable "ALUMNO[l].calificacion" y la variable "ALUMNO[l].lista" es al parecer la dirección de memoria de dicha variable y no el valor que mandé guardar en el ciclo anterior con el "scanf"

mira como declaras tus variables haber si te das cuenta:
Citarint calificacion[100];
        int lista[100];


Saludos
#239
Citarla variable total la usas 2 veces con diferentes resultados y eso no se puede.
por que no se puede??
#240
Hola! busca la funcion atoi


Saludos