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ú

Temas - BlerofonT

#1
Buenas a tod@s!!!

el problema que tengo es que estaba aprendiendo a usar la funcion SYSTEM la cual en principio no la encontre mucha dificultad. Pues bien, yo tengo Windows 7 asike mire en internet la lista de comandos para windows 7 y cree un programa en Dev-C++ que solo haria llamadas a SYSTEM (era inutil el programa, pero solo era para probar). Mi sorpresa fue cuando me di cuenta que con algunos comando funciona (como por ejemplo los tipicos "cls", "pause", "del"...)pero con otros no("cd.."y especialmente el que me molesta mas que no funcione es "exit"). ¿Alguien sabe porque al ejecutar system("exit") no m salgo del interprete de comandos y continua con el printf?¿porque no funciona el system("cd..")?

Aqui os dejo el codigo, aunque no creo q tenga mucho interes...

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main (void){
    printf ("\nHola\n\n\n");
    system ("dir");
    system ("pause");
    system ("del name.txt");
    system ("pause");
    system ("cd..");
    system ("dir");
    system ("pause");
    system ("exit");/*NO SALE DEL INTERPRETE DE COMANDOS Y CONTINUA CON EL printf */
    printf ("\nAdios\n\n");
    system ("pause");
}



Gracias
#2
Buenas a tod@s!!!

Mi problema es que he hecho un programa en el cual modifico las siguientes estructuras:

Código (cpp) [Seleccionar]
struct Producto{
       int codigo;
       char nombre[N];/*N=50*/
       float precio;
       int stock;
       };


y cuando hago el Dev-C++ un sizeof(struct Producto) me dice que ocupa 64bytes, pero si hacemos el calculo: 4 de int + 50 de char +4 float(en mi makina el tamaño de float es 4) + 4 de int =62!!!!
En cambio en Borland si que el sizeof(struct Producto) = 62.

¿Alguien sabe porke Dev-C++ me cuenta 2 bytes de mas?(creo que estos dos bytes son debidos a la cadena de 50 caracteres, ya que al leer la estructura de un fichero, el puntero avanza por el fichero: 4+50+2+4+4 y ademas cree una estructura con solo un int y un float y el sizeof(struct Producto)=8, como debe de ser )

Espero vuestras respuestas!!! :D
#3
Buenos dias chic@s. Tengo una duda con un programa. Realmente le he hecho de dos formas, de la primera no funciona y de la segunda si. Como estoy aprendiendo programacion, me gustaria que alguien me explique porke narices no funciona la primera(creo que es relacionado con el paso por punteros o direcciones de memoria, pero no lo se...). Aqui dejo el codigo. No os asusteis porke sea muy largo, con que mireis la ultima funcion llamada "eliminar"(elimina una estructura de un arreglo) que es donde esta el problema, ya vale(dejo el programa por si alguien le kiere ejecutar y para que se entienda mejor). El problema es que aunque paso a la funcion el arreglo como puntero, no me elimina la estructura del arreglo(aunke la "n" si disminuye una unidad). Realmente parece que si la elimina(si miramos las llamadas a visualizar), pero no llega bien a la funcion main. Supongo para alguien que sepa programar bien la duda sera estupida, pero yo no lo entiendo :(

Gracias a todos!!!

Código (cpp) [Seleccionar]
/*****   Preproceso*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 50
#define ELEM 20
#define UU char(163)/*Para los acentos*/

/***** Variables globales*/
/***** int const N=50;*/
struct Producto{
       int codigo;
       char nombre[N];
       float precio;
       int stock;
       };

/***** Declaracion de funciones o procedimientos*/
int menu (void);
void introducir (struct Producto x[],int &n);
void visualizar (struct Producto x[],int n);
int existe_codigo (struct Producto x[],int n, int cod);
void comprar (struct Producto x[],int n);
void vender (struct Producto x[],int n);
void modificar (struct Producto x[],int n);
int submenu (void);
void ordenar_cod (struct Producto x[],int n);
void ordenar_pre (struct Producto x[],int n);
void ordenar_sto (struct Producto x[],int n);
void ordenar_nom (struct Producto x[],int n);
void grabar_fichero (struct Producto x[],int n,char* nom);
void cargar_fichero (struct Producto x[], int &n, char* nom);
void cambiar (struct Producto x[], int &n, char* nom);
void eliminar (struct Producto x[], int &n);

/***** Programa principal*/

int main (){
    /***** Var. Locales*/
    int opcion=0, opcion2 =0;
    int n = 0;
    char nombre[ELEM];
    struct Producto producto[ELEM];
    printf ("C%cal es el nombre de la tienda??", UU);
    gets(nombre);
    cargar_fichero (producto, n, nombre);
   
    do{
       opcion = menu();
       switch(opcion){
             case 1:
                  introducir(producto, n);
                  break;
             case 2:
                  visualizar(producto, n);
                  break;
             case 3:
                  comprar(producto, n);
                  break;
             case 4:
                  vender(producto, n);
                  break;
             case 5:
                  modificar(producto, n);
                  break;
             case 6:
                  opcion2 = submenu();
                  switch(opcion2){
                                  case 1:
                                  ordenar_cod(producto, n);
                                  break;
                                  case 2:
                                  ordenar_nom(producto, n);
                                  break;
                                  case 3:
                                  ordenar_pre(producto, n);
                                  break;
                                  case 4:
                                  ordenar_sto(producto, n);
                                  break;           
                  }
                 
                  break; 
             case 7:
                  cambiar(producto, n, nombre);
                  break;
             case 8:
                  eliminar(producto, n);
                  visualizar (producto,n);/*Llamada para ver el ERROR*/
                  break;
       }
         
    } while (opcion !=0);
    grabar_fichero(producto, n, nombre);
    return 0;
}


/***** Cuerpo de las funciones*/
int menu (void){
    int opcion;
    do{
       printf ("\n\n1. Introducir Producto");
       printf ("\n2. Listar Productos disponibles");
       printf ("\n3. Comprar");
       printf ("\n4. Vender");
       printf ("\n5. Cambiar Precio");
       printf ("\n6. Ordenar");
       printf ("\n7. Cambiar tienda");
       printf ("\n8. Eliminar producto");
       printf ("\n0. Salir\n\n");
       fflush (stdin);
       scanf ("%d", &opcion);
       
    }while((opcion<0) || (opcion>8));
    return opcion;
}


int submenu (void){
    int opcion;
    do{
       printf ("\n¿Como quieres ordenar?");
       printf ("\n1. Codigo");
       printf ("\n2. Nombre");
       printf ("\n3. Precio");
       printf ("\n4. Stock\n\n");
       fflush (stdin);
       scanf ("%d", &opcion);
       
    }while((opcion<1) || (opcion>4));
    return opcion;
}
   

void introducir (struct Producto x[],int &n){
     int controlar;
     do{
     printf ("\nIntroduzca Codigo: ");
     fflush (stdin);
     scanf ("%d", &x[n].codigo);
     controlar = existe_codigo (x, n, x[n].codigo);
     if (controlar != -1)
        printf("\nEl producto ya existe!!!");
     }while (controlar != -1);
     
     printf ("\nIntroduzca Nombre Producto: ");
     fflush (stdin);
     gets (x[n].nombre);
     printf ("\nIntroduzca Precio: ");
     fflush (stdin);
     scanf ("%f", &x[n].precio);
     printf ("\nIntroduzca Stock: ");
     fflush (stdin);
     scanf ("%d", &x[n].stock);
     n++;
}


void visualizar (struct Producto y[],int n){
     int i;
     for (i=0; i<n; i++){
         printf ("\n%10d\t%20s\t%10.2f\t%10d", y[i].codigo, y[i].nombre, y[i].precio, y[i].stock);
     }
}


int existe_codigo (struct Producto x[],int n, int cod){
     int i, r = -1;
     for (i=0; i<n; i++){
         if (x[i].codigo == cod){
            r = i;
            break;
           
         }
     }
     return r;/*****Retorna la posicion si existe y -1 si no existe*/
}


void comprar (struct Producto x[],int n){
     int codigo, result, cant;
     printf ("\nQue producto desea comprar?(indique codigo)");
     fflush (stdin);
     scanf ("%d", &codigo);
     result = existe_codigo (x, n, codigo);
     if (result == -1){
          printf ("\nEl producto no existe!!!");
     }
     else{
          printf ("\nCuanta cantidad desea comprar??");
          fflush (stdin);
          scanf ("%d", &cant);
          x[result].stock = x[result].stock + cant;
     }
}


void vender (struct Producto x[],int n){
     int codigo, result, cant;
     printf ("\nQue producto desea vender?(indique codigo)");
     fflush (stdin);
     scanf ("%d", &codigo);
     result = existe_codigo (x, n, codigo);
     if (result == -1){
          printf ("\nEl producto no existe!!!");
     }
     else{
          printf ("\nCuanta cantidad desea vender??");
          fflush (stdin);
          scanf ("%d", &cant);
          x[result].stock = x[result].stock - cant;
     }
}


void modificar (struct Producto x[],int n){
     int codigo, result;
     float precio;
     printf ("\nQue producto desea modificar precio?(indique codigo)");
     fflush (stdin);
     scanf ("%d", &codigo);
     result = existe_codigo (x, n, codigo);
     if (result == -1){
          printf ("\nEl producto no existe!!!");
     }
     else{
          printf ("\nValor del nuevo precio: ");
          fflush (stdin);
          scanf ("%f", &precio);
          x[result].precio = precio;
     }
}


void ordenar_cod (struct Producto x[],int n){
     bool ordenado = false;
     int i;
     struct Producto aux;
     int j = 0;
     while (j<n-1 || ordenado == false){
           ordenado = true;
           for (i=0; i<n-1; i++){
                     if (x[i].codigo > x[i+1].codigo){
                     aux = x[i];
                     x[i] = x[i+1];
                     x[i+1] = aux;
                     ordenado = false;
                     }
           }                     
           j++;
     }
}


void ordenar_pre (struct Producto x[],int n){
     bool ordenado = false;
     int i;
     struct Producto aux;
     int j = 0;
     while (j<n-1 || ordenado == false){
           ordenado = true;
           for (i=0; i<n-1; i++){
                     if (x[i].precio > x[i+1].precio){
                     aux = x[i];
                     x[i] = x[i+1];
                     x[i+1] = aux;
                     ordenado = false;
                     }
           }                     
           j++;
     }
}


void ordenar_sto (struct Producto x[],int n){
     bool ordenado = false;
     int i;
     struct Producto aux;
     int j = 0;
     while (j<n-1 || ordenado == false){
           ordenado = true;
           for (i=0; i<n-1; i++){
                     if (x[i].stock > x[i+1].stock){
                     aux = x[i];
                     x[i] = x[i+1];
                     x[i+1] = aux;
                     ordenado = false;
                     }
           }                     
           j++;
     }
}


void ordenar_nom (struct Producto x[],int n){
     bool ordenado = false;
     int i;
     struct Producto aux;
     int j = 0;
     while (j<n-1 || ordenado == false){
           ordenado = true;
           for (i=0; i<n-1; i++){
                     if (strcmp (x[i].nombre , x[i+1].nombre) > 0){
                     aux = x[i];
                     x[i] = x[i+1];
                     x[i+1] = aux;
                     ordenado = false;
                     }
           }
           j++;
     }
}


void grabar_fichero (struct Producto x[], int n, char* nom){
     FILE *fichero = NULL;
     int i;
     fichero = fopen(nom, "wb");
     if (fichero == NULL){
        printf ("\nERROR: No se ha podido abrir %s", nom);
        getch();
        exit(0);
     }
     else{
         for (i=0; i<n; i++){
             fwrite(&x[i], sizeof(struct Producto), 1, fichero);
         }
         fclose(fichero);
     }
}


void cargar_fichero (struct Producto x[], int &n, char* nom){
     FILE *fichero = NULL;
     strcat(nom,".dat");
     fichero = fopen(nom, "rb");
     if (fichero == NULL){
        printf ("\nADVERTENCIA: No se ha podido abrir %s", nom);
        getch();
     }
     else{
             fread(&x[n], sizeof(struct Producto), 1, fichero);
             while(!feof(fichero)){
                 n++;
                 fread(&x[n], sizeof(struct Producto), 1, fichero);
             }
             fclose(fichero);
     }
}


void cambiar (struct Producto x[], int &n, char* nom){
     grabar_fichero(x, n, nom);
     printf ("\nC%cal es el nombre de la tienda a la que quieres cambiar??", UU);
     fflush (stdin);
     gets(nom);
     n=0;
     cargar_fichero (x, n, nom);
}


void eliminar (struct Producto x[], int &n){
     int pro_elim, result, i,j=0;
     struct Producto auxiliar[ELEM];
     printf ("\nCodigo del producto que deseas eliminar??");
     fflush (stdin);
     scanf ("%d", &pro_elim);
     result = existe_codigo (x, n, pro_elim);
     if (result == -1){
          printf ("\nEl producto no existe!!!");
     }
     else{
          for(i=0; i<n; i++){
                if (i!=result){
                      auxiliar[j]=x[i];
                      j++;
                }
          }
          n--;
          x = auxiliar;
     }
     visualizar (auxiliar,n);/*Llamada para ver el ERROR*/
     visualizar (x,n);/*Llamada para ver el ERROR*/
}


Funcion "eliminar" corregida y SI FUNCIONA:

Código (cpp) [Seleccionar]
void eliminar (struct Producto x[], int &n){
     int pro_elim, result, i,j=0;
     struct Producto auxiliar[ELEM];
     printf ("\nCodigo del producto que deseas eliminar??");
     fflush (stdin);
     scanf ("%d", &pro_elim);
     result = existe_codigo (x, n, pro_elim);
     if (result == -1){
          printf ("\nEl producto no existe!!!");
     }
     else{
          for(i=0; i<n; i++){
                if (i!=result){
                      auxiliar[j]=x[i];
                      j++;
                }
          }
          n--;
          for(i=0; i<n; i++){
                   x[i]= auxiliar[i];
          }
     }
     visualizar (auxiliar,n);/*Llamada para ver el ERROR*/
     visualizar (x,n);/*Llamada para ver el ERROR*/
}


El problema esta en:

Código (cpp) [Seleccionar]
x = auxiliar;

que lo he cambiado por lo siguiente y si funciona:

Código (cpp) [Seleccionar]
for(i=0; i<n; i++){
          x[i]= auxiliar[i];
          }

#4
Buenas a tod@s!!!

Pues estaba escribiendo un nuevo tema para preguntar una duda y al copiar mi codigo del dev-C++ y pegarle aqui, habia parte del codigo que no me lo pegaba como estaba originalmente. Sobretodo me fije en que no me copiaba las "i" que van dentro de los corchetes para acceder a elementos de una lista en bucles (ejemplo for(i=0;i<20;i++) nomb_array; ) Aqui me ha pasado lo mismo... :(

Alguien me puede echar una mano e indicarme como pegar TODO mi codigo en los mensajes sin problemas??

Gracias