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

#1
Hola a todos. Necesito extraer números leidos de 2 ficheros para insertarlos de manera ordenada en un nuevo fichero que genero. Hay una dificultad añadida, no puedo usar array  :-(. ¿me podrias ayudar?. NO SE COMO PODER INSERTARLOS BIEN.
Este es mi código. En él, viene escrito el enunciado

import java.io.*;
import javax.swing.JOptionPane;

/**
*
Se quiere crear una clase llamada MezclaFicheros en la que se van
  a crear dos ficheros(llamados NUM1.dat y NUM2.dat con números
  enteros ). Los números de ambos ficheros los introducimos por
  teclado en orden creciente. Por ejemplo, primero introducimos
  Nº números del fichero 1(p.ej:4), introducimos los números
  (p.ej: 4,6,8,10) y después los del otro fichero (1,3,5,7,8).
          Una vez creado ambos ficheros, crearemos otro llamado MEZCLA.dat  que
          tendrá los números de los dos ficheros mezclados en orden.     (1,3,4,5,6,7,8,8,10).
*/
       public class MezclaFicherosSinArray {

/**
* Método escribirFichero. Dado un nombre de fichero, escribe una serie de numeros
* introducidos por teclado
* @param nombreFichero
* @throws IOException
*/
public static void escribirFichero(String nombreFichero) throws IOException{

    File fichero =new File (nombreFichero);
    FileOutputStream fileout = new FileOutputStream (fichero);
    DataOutputStream dataOS = new DataOutputStream(fileout);
    String texto=JOptionPane.showInputDialog("Cuantos numeros quiere introducir");
    int totalNum=Integer.parseInt(texto);
   
    for (int i=0;i<totalNum; i++)
    {
    String texto2=JOptionPane.showInputDialog("Inserte numero");
int num=Integer.parseInt(texto2);
        dataOS.writeInt(num);
    }
    dataOS.close(); //cerrar strearn

}
/**
* Método leerFichero. Método que lee numeros de un fichero
* @param nombreFichero
* @throws IOException
*/

public static void leerFichero(String nombreFichero)throws IOException{

    File fichero = new File (nombreFichero);
    FileInputStream filein = new FileInputStream (fichero) ;
    DataInputStream dataIS = new DataInputStream (filein);
 
    int e;
    try {
    while (true) {
       
        e = dataIS.readInt(); //recupera la edad
        System.out.println("Numero: "+ e);
    }
    }catch (EOFException eo) {}
    dataIS.close(); //cerrar stream

}

/**
*Método mezclaFicheros. Método que recoge numeros de 2 ficheros dados y los escribe de
*manera ordenada en uno nuevo llamado MEZCLA.DAT
* @param fichero1
* @param fichero2
* @throws IOException
*/
public static void mezclaFicheros(String fichero1, String fichero2) throws IOException{


    File fichero =new File ("MEZCLA.dat");
    FileOutputStream fileout = new FileOutputStream (fichero);
    DataOutputStream dataOS = new DataOutputStream(fileout);
   
    File ficheroleido1 = new File (fichero1);
    FileInputStream filein = new FileInputStream (ficheroleido1) ;
    DataInputStream dataIS = new DataInputStream (filein);
   
    File ficheroleido2 = new File (fichero2);
    FileInputStream filein2 = new FileInputStream (ficheroleido2) ;
    DataInputStream dataIS2 = new DataInputStream (filein2);
       
    int num1,num2;
   
    try {
    num1 = dataIS.readInt();
    num2= dataIS2.readInt();
    while (true)
    {
if(num1<num2)
{
dataOS.writeInt(num1);
        dataIS.readInt();
}else{
if(num1>num2)
{
dataOS.writeInt(num2);
        dataIS2.readInt();
}else{
    dataOS.writeInt(num2);
    dataIS.readInt();
}
}

    }
   
    }catch (EOFException eo) {}
   
    try{
    num1 = dataIS.readInt();
    while(true){
   
    dataOS.writeInt(num1);
    dataIS.readInt();
    }
    }catch(EOFException e){}
   
    dataIS.close();
    dataIS2.close();
    dataOS.close();
   
    System.out.println("RESULTADO FINAL");
    leerFichero("MEZCLA.dat");
}

/**
* Método main
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {

escribirFichero("NUM1.dat");
escribirFichero("NUM2.dat");

System.out.println("FICHERO NUM1.DAT");
leerFichero("NUM1.dat");

System.out.println("FICHERO NUM2.DAT");
leerFichero("NUM2.dat");

System.out.println("FICHERO MEZCLA.DAT");
mezclaFicheros("NUM1.dat", "NUM2.dat");


}


}





Muchas gracias, un saludo y espero que podais ayudarme
#2
Para que os deis cuenta de hasta que punto se programar, me he dado cuenta de que si lo que piden es almacenar la informacion en arrays ¿para que quiero una lista?.
Aunque obviando eso, el programa me sigue sin ir. ¿Alguien puede ayudarme?
NUevo codigo:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define MC 2000

using namespace std;
class Automovil{
                char matricula[MC], marca[MC];
                int cilindrada, consumo;
               
      public:
                Automovil(){
                            strcpy(matricula,"");
                            strcpy(marca,"");
                            cilindrada=0;
                            consumo=0;
                        }
                Automovil(char *ma,char *mar, int ci, int con){
                            strcpy(matricula,ma);
                            strcpy(marca,mar);
                            cilindrada=ci;
                            consumo=con;
                             
                               }
                              int val(int min, int max);
                              void cadenas(char *a);
                               
                  } ;
     
class Coche:virtual public Automovil{
      int numpuertas;
      public:
             Coche():Automovil(){numpuertas=0;}
             Coche(char *ma,char *mar, int ci, int con,int numpu):Automovil(ma,mar,ci,con){numpuertas=numpu;};
             void ver_coche();
             void alta_coche();
      } ;
     
class Motocicleta:virtual public Automovil{
      public:
             Motocicleta():Automovil(){};
             Motocicleta(char *ma,char *mar, int ci, int con):Automovil(ma,mar,ci,con){};
             void ver_moto();
             void alta_moto();
   };


   
void Motocicleta::alta_moto(){
        char ma;char mar;
        int ci; int con;int ok;int i;
        do {
            ok=1;
            cout<<"Introduzca la marca de la moto:\t";
            cadenas(&ma);
            cout<<"Introduzca la matricula de la moto:\t";
            cadenas(&mar);
            cout<<"Introduzca la cilindrada de la moto:\t";
            ci=val(4,8);
            cout<<"Introduzca el consumo de la moto:\t \n";
            con=val(4,8);
           
            }while(!ok);
   
         }

void Coche::alta_coche(){
        char ma;char mar;
        int ci; int con;int numpu;int ok;int i;
        do {
            ok=1;
            cout<<"Introduzca la marca del vehiculo:\t";
            cadenas(&ma);
            cout<<"Introduzca la matricula del vehiculo:\t";
            cadenas(&mar);
            cout<<"Introduzca el numero de puertas del vehiculo:\t";
            numpu=val(4,8);
            cout<<"Introduzca la cilindrada del vehiculo:\t";
            ci=val(4,8);
            cout<<"Introduzca el consumo del vehiculo:\t\n";
            con=val(4,8);
                        }while(!ok);
         } 

int Automovil:: val(int min, int max){
    long re;
    do{
         cin>>re;
         if(re<min||re>max)
         cout<<"Error\t";
       
      }while(re<min||re>max);
    return re;
    }
   
void Automovil::cadenas(char *a){
         char b[MC];
         int n;
         fflush(stdin);
         fgets(b,MC-1,stdin);
         n=strlen(b);
         b[n-1]='\0';
         strcpy(a,b);
          }
         
         
void Coche::ver_coche(){
     cout<<"COCHE\n";
     cout<<"MARCA: \n"<<marca<<endl;
     cout<<"MATRICULA \n"<<matricula<<endl;
     cout<<"CONSUMO \n"<<consumo<<endl;
     cout<<"CILINDRADA \n"<<cilindrada<<endl;
     cout<<"NUMERO DE PUERTAS \n"<<numpuertas<<endl;
                  }
                     
void Motocicleta::ver_moto(){
cout<<"MOTO\n";
cout<<"MARCA: \n"<<marca<<endl;
cout<<"MATRICULA \n"<<matricula<<endl;
cout<<"CONSUMO \n"<<consumo<<endl;
cout<<"CILINDRADA \n"<<cilindrada<<endl;
}


int sel(int tipo ){
             switch(tipo){
             case 1: alta_moto();
             break;
             case 2: alta_coche();
             break;
             case 3: //¿QUE DEBO PONER?;
             break;
             case 4: //¿QUE DEBO PONER?;
             break;
             default:
             break;
             }

}
int main(int argc, char *argv[])
{
   int res; int i;

    Motocicleta motos[25];
    for(i=0;i<25;i++)
    motos[i]=new Motocicleta;
    Coche coches[75];
    for(i=0;i<75;i++)
    coches[i]=new Coche;
    do{
    cout<<"*****************BIENVENIDOS AL CONCESIONARIO MONGOCONGO*************"<<endl;
    cout<<"1.Alta moto"<<endl;
    cout<<"2.Alta coche"<<endl;
    cout<<"3.ver motos"<<endl;
    cout<<"4.ver coches"<<endl;
            res = val(1,4);
            sel(res);
            }while(res!=4);
    system("PAUSE");
    return 0;
}

#3
Hola a todos, escribo en el foro para saber si me pudieran ayudar con un ejercicio. Dice asi:
Crear una clase Automóvil cuyos atributos serán: matricula, cilindrada, consumo y marca. Escribir el/los constructores necesarios para esta clase.
•   Crear una clase Coche, hija publica de Automóvil que contenga Nº de puertas y todos los atributos heredados de la clase automóvil. Define el constructor.
•   Crear una clase Motocicleta, hija publica de Automóvil, sus atributos serán los heredados de la clase automóvil. Define el constructor.
•   Gestiona un concesionario con un máximo de 25 motocicletas y 75 coches organizados en arrays de objetos. Obtener un listado de las motocicletas y los coches de los que disponemos.

Bien, mi codigo es este:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define MC 2000

using namespace std;
class Automovil{
                char matricula, marca;
                int cilindrada, consumo;
                Automovil *sig;
      public:
                Automovil();
                Automovil(char ma,char mar, int ci, int con);
                               void ver_automovil();
      } ;
     
class Coche:virtual public Automovil{
      int numpuertas;
      public:
             Coche():Automovil(){numpuertas=0;}
             Coche(char ma,char mar, int ci, int con,int numpu):Automovil(ma,mar,ci,con){numpuertas=numpu;};
      } ;
     
class Motocicleta:virtual public Automovil{
      public:
             Motocicleta():Automovil(){};
             Motocicleta(char ma,char mar, int ci, int con):Automovil(ma,mar,ci,con){};
   };
     
class Lista{
      private:
              Automovil *lauto;
      public:
             Lista(){lauto=NULL;}
             void alta_coche();
             void alta_moto();
             int val(int min, int max);
             void cadenas(char *a);
             void ver_lista_coche();
             void ver_lista_moto();
           };

void Lista::ver_lista_moto(){
     Automovil *aux= lauto;
     while(aux){
                aux->ver_automovil();
               
                   }
   }         
             
void Lista::ver_lista_coche(){
     Automovil *aux= lauto;
     while(aux){
                aux->ver_automovil();
               
                   }
   }
   
void Lista::alta_moto(){
        char ma;char mar;
        int ci; int con;int ok;int i;
        do {
            ok=1;
            cout<<"Introduzca la marca de la moto:\t";
            cadenas(&ma);
            cout<<"Introduzca la matricula de la moto:\t";
            cadenas(&mar);
            cout<<"Introduzca la cilindrada de la moto:\t";
            ci=val(4,8);
            cout<<"Introduzca el consumo de la moto:\t";
            con=val(4,8);
           
            }while(!ok);

         }       

void Lista::alta_coche(){
        char ma;char mar;
        int ci; int con;int numpu;int ok;int i;
        do {
            ok=1;
            cout<<"Introduzca la marca del vehiculo:\t";
            cadenas(&ma);
            cout<<"Introduzca la matricula del vehiculo:\t";
            cadenas(&mar);
            cout<<"Introduzca el numero de puertas del vehiculo:\t";
            numpu=val(4,8);
            cout<<"Introduzca la cilindrada del vehiculo:\t";
            ci=val(4,8);
            cout<<"Introduzca el consumo del vehiculo:\t";
            con=val(4,8);
                        }while(!ok);

         }

int Lista:: val(int min, int max){
    long re;
    do{
         cin>>re;
         if(re<min||re>max)
         cout<<"Error\t";
       
      }while(re<min||re>max);
    return re;
    }
   
void Lista::cadenas(char *a){
         char b[MC];
         int n;
         fflush(stdin);
         fgets(b,MC-1,stdin);
         n=strlen(b);
         b[n-1]='\0';
         strcpy(a,b);
          }
         
void Automovil::ver_automovil(){
     int tipo;
     switch(tipo){
     case 1:cout<<"COCHE";
     break;
     default:
             cout<<"MOTO";
             break;}
             cout<<"MARCA:"<<marca<<endl;
             cout<<"MATRICULA"<<matricula<<endl;
             cout<<"CONSUMO"<<consumo<<endl;
             cout<<"CILINDRADA"<<cilindrada<<endl;
    }
     
void sel(int tipo, Lista *lista){
             switch(tipo){
             case 1: lista->alta_moto();
             break;
             case 2: lista->alta_coche();
             break;
             case 3: lista->ver_lista_moto();
             break;
             case 4: lista->ver_lista_coche();
             break;
             default:
             break;
             }

}

int main()
{
    int res,i;
    Lista *lista;
    Motocicleta motos[25];
    for(i=0;i<25;i++)
    motos[i]=new Motocicleta;
    Coche coches[75];
    for(i=0;i<75;i++)
    coches[i]=new Coche;
    do{
    cout<<"*****************BIENVENIDOS AL CONCESIONARIO MONGOCONGO*************"<<endl;
    cout<<"1.Alta moto"<<endl;
    cout<<"2.Alta coche"<<endl;
    cout<<"3.ver motos"<<endl;
    cout<<"4.ver coches"<<endl;
            res = val(1,4);
            sel(res,lista);
            }while(res!=4);

    system("PAUSE");
    return 0;
}


Necesito saber como almacenar las motos y los coches (previa creacion de ambas claro).
Agradeceria que me dijeran todos los fallos posibles, trucos, consejos...que me ayuden a ir al grano y evitar quebraderos de cabeza.

Muchas gracias y espero tener respuesta.
Un saludo
Tenji

#4
Mi nuevo código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <conio.h>

typedef struct futbolistas{
        struct futbolistas *sig;
        float sueldo;
        char nombre[50];
}Datos;
typedef Datos *Lista;
typedef Datos *NODO;

Lista listafutbolistasdisponibles=NULL;
Lista listafutbolistaselegidos=NULL;

void insertar( Lista *listafutbolistasdisponibles){
NODO nuevo;
do{
      nuevo=(NODO*)malloc(sizeof(NODO));
      puts("Introduzca el nombre del futbolista:\n");
      fflush(stdin);
      fgets(nuevo->nombre,50-1,stdin);
      puts("Introduzca el sueldo del futbolista:\n");
      fflush(stdin);
      scanf("%f",&nuevo->sueldo);
      nuevo->sig=listafutbolistasdisponibles;
                  if(listafutbolistasdisponibles==NULL){
                       *listafutbolistasdisponibles=nuevo;
                  }else{
                        nuevo->sig=listafutbolistasdisponibles;
                        listafutbolistasdisponibles=nuevo;
                        }
      }while(nuevo->nombre=="");
}

void Mostrar_datos(Lista listafutbolistasdisponibles){
     int i=0;float presupuesto = 5000;
NODO aux=NULL;
aux=listafutbolistasdisponibles;
while(aux){
           i++;
           printf("Presupuesto: %f / Queda: %f \n", presupuesto, presupuesto);
           printf("Jugadores \t\t Equipo \n");
           printf("------------------------------------------------ \n");
           printf("%s ( %.2f )\n", &aux->nombre, &aux->sueldo);
           printf("\t\t Gasto\n");
           aux=aux->sig;
           }
}

void ElegiryCopiar(Lista listafutbolistasdisponibles, Lista *listafutbolistaselegidos){
NODO aux, sig, nodo, nodo2;
int enc,ok; char objetivo[50];
do{
        enc=0;
        puts("¿Que jugador quiere fichar?\n");
        fflush(stdin); fgets(objetivo,50-1,stdin);
        aux = listafutbolistasdisponibles;
                while (aux && !enc){
                        if (aux->nombre==objetivo){
                                enc=1;
                                while(nodo){
                                        strcpy(objetivo,nodo->nombre);
                                        nodo2=(NODO*)malloc(sizeof(NODO));
                                        strcpy(objetivo,nodo->nombre);
                                        nodo2->sig= *listafutbolistaselegidos;
                                        *listafutbolistaselegidos=nodo2;
                                        nodo=nodo->sig;
                                           }
                                 aux=aux->sig;
                                } //fin del if
                        }//fin del primer while
         if(enc==0)
         puts("Error");
         puts("¿Quiere fichar de nuevo?(0-no/ 1-si)\n");
         ok=validar(0,1);
}while(ok==1);
}//fin de ElegiryCopiar

int validar(int min, int max){
  int resultado;
  do{
      fflush(stdin);
      scanf("%d",&resultado);
      if(resultado<min||resultado>max)
      puts("Error");
  }while(resultado<min||resultado>max);
return resultado;
}


int main(){
char Salir[1];
char Elegir[1];
char Quitar[1];
int opciones;
insertar(&listafutbolistasdisponibles);
Mostrar_datos(listafutbolistasdisponibles);
printf("(E)legir \t (Q)uitar jugador\t (S)alir\n");
  opciones= validar(1,3);
  switch(opciones){
      case 1:
      while (Elegir == 'e' || Elegir == 'E'){
      ElegiryCopiar(listafutbolistasdisponibles,&listafutbolistaselegidos);}
                   break;
      case 2: while (Quitar == 'q' || Quitar =='Q'){  /*Eliminarjugador(&listafutbolistasdisponibles,listafutbolistaselegidos);
                   break;     */ }
      case 3:
      while (Salir == 's' || Salir == 'S'){/*Salir(listafutbolistasdisponibles);

                   break;  */     }
                   default:
                   break;
                 }
    system("pause");
    return 0;
}

¿Alguién puede ayudarme o decirme en que/por que fallo, por favor?.
Gracias y hasta pronto(espero).
#5
Bueno Leo, gracias por el consejo, he intendado hacer lo que dices y este es el resultado:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct futbolistas{
        struct futbolistas *sig;
        float sueldo;
        char nombre[50];
}Datos;
typedef Datos *Lista;
typedef Datos *T_NODO;

void insertar( Lista *listafutbolistasdisponibles){
T_NODO *nuevo=NULL;
do{
      nuevo=(T_NODO*)malloc(sizeof(T_NODO));
      puts("Introduzca el nombre del futbolista:\n");
      fflush(stdin);
      fgets(nuevo->nombre,50-1,stdin);
      puts("Introduzca el sueldo del futbolista:\n");
      fflush(stdin);
      scanf("%f",nuevo->sueldo);
      nuevo->sig=listafutbolistasdisponibles;
                  if(listafutbolistasdisponibles==NULL){
                       listafutbolistasdisponibles=nuevo;                           
                  }else{
                        nuevo->sig=listafutbolistasdisponibles;
                        listafutbolistasdisponibles=nuevo;
                        }
      }while(nuevo->nombre=="");
}

void Mostrar_datos(Lista listafutbolistasdisponibles){
     int i=0;float presupuesto = 5000;
T_NODO *aux=NULL;     
aux=&listafutbolistasdisponibles;
while(aux){
           i++;
           printf("Presupuesto: %f / Queda: %f \n", presupuesto, presupuesto);
           printf("Jugadores \t\t Equipo \n");
           printf("------------------------------------------------ \n");
           printf("%s ( %.2f )\n", aux->nombre,aux->sueldo);
           printf("\t\t Gasto\n");
           aux=aux->sig;
           }
printf("(E)legir \t (Q)uitar jugador\t (S)alir\n");


int main(){
Lista *listafutbolistasdisponibles=NULL;
Lista *listafutbolistaselegidos=NULL;
insertar(&listafutbolistasdisponiles);
Mostrar_datos(listafutbolistasdisponibles);
   
    system("pause");
    return 0;
}



Como podrás ver no he avanzado mucho, sigo cometiendo muchos fallos y me gustaria saber cúales son para seguir avanzando con el ejercicio. ¿Me ayudas?.
¿Alguién mas puede ayudarme?.

Un saludo
#6
Hola de nuevo, gracias Dark invader(otra vez). Mira, he estado realizando cambios y adaptaciones al programa y me ha quedado asi:
#include <string.h>
#include <stdio.h>
#define N 50
#define MAX_J 2
#define PRES 500000

struct fichajes
{
    float sueldo;
    char nombre[N];
};
typedef struct fichajes Jugadores;

int validar(int min,int max);
void cadenas(char *cadena);
int validarsueldo(float valor,int min,int max);

int main()
{
    Jugadores jugadores[MAX_J];
    float presupuesto = PRES;
    float previo;
    int i,ok,j,res;
   
    // Inicializamos los valores
   
    for(i=0;i<MAX_J;i++)
        jugadores[i].sueldo = -1;
       
    /* Inserción de datos: */
    i=0;
    while(presupuesto > 0 && i<MAX_J)
    {
        cadenas(jugadores[i].nombre);
        do
        {
            ok=1;
            printf("Introduce SUELDO del jugador:\t");
            scanf("%f",&previo);
            ok = validarsueldo(previo,100,80000);
            if(!ok) printf("Error. Valor fuera de rango\n");   
        }while(!ok);
       
       
        if(previo > presupuesto)
        {
            printf("Error. Presupuesto insuficiente. Se asignara presupuesto restante....\n");
            jugadores[i].sueldo = presupuesto;
            presupuesto-= jugadores[i].sueldo;
        }
        else
        {
            jugadores[i].sueldo = previo;
            presupuesto-=previo;
        }   
       
        printf("Desea seguir introduciendo jugadores? (0-NO / 1-SI):\t");
        res = validar(0,1);
        if(res)
        {
                printf("Queda un presupuesto de: %.2f euros\n",presupuesto);
                i++;
                if(i==MAX_J) printf("Numero de fichajes maximos alcanzados.....\n");
        }
        else i=MAX_J;
       
       
    } // fin while
   
   
    /*Presentación de los datos:*/
    j=0;
    for(i=0;i<MAX_J;i++)
    {
        if(jugadores[i].sueldo!=-1)
        {
            printf("Jugador %d:\n",j+1);
            printf("\tNOMBRE: %s\n",jugadores[i].nombre);
            printf("\tSUELDO: %.2f euros.\n",jugadores[i].sueldo);
            j++;
        }
    }
     
    return 0;
   
}

int validarsueldo(float valor,int min,int max)
{
    if(valor<min || valor>max)
        return 0;
    return 1;
}

int validar(int min,int max)
{
    int valor;
    do
    {
        scanf("%d",&valor);
        if(valor<min || valor>max)
            printf("Error. Valor fuera de rango.\n.Introduzca nuevo valor:\t");
    }while(valor<min || valor>max);
    return valor;
}

void cadenas(char *cadena)
{
    char cad[N];
    int n;
    printf("Introduce NOMBRE DEL JUGADOR:\t");
    fflush(stdin);
    fgets(cad,N-1,stdin);
    n = strlen(cad);
    cad[n-1] = '\0';
    strcpy(cadena,cad);
}


Bueno, he de decir que me ha ayudado un chaval (que usa debian) y no se que he hecho pero no muestra los resultados. (Solamente he borrado #include <ncurses.h> y he sustituido __fpurge por fflush). ¿Alguién me puede decir por que?.
Yo pienso que es porque no hay un getchar(); o un system("pause"); pero no se si hay algo mas.

Agradeceria una respuesta.

Un saludo y hasta pronto.
#7
Hola buenas tardes, quisiera que me ayudarán a realizar el siguiente programa en el cúal he de emplear 2 listas y un fichero. He de decir para quien vea el código que he realizado, que soy novato en esto de la programación y no se me da muy bien que digamos, por ello es probable que haya cosas que sobren (doy por hecho que faltan cosas).

El enunciado es el siguiente:

Se pretende realizar un programa en C para los clubes de fútbol, que permita realizar la gestión de fichajes para la próxima temporada.
El programa dispondrá de una lista de jugadores disponibles que podrán ser fichados por el equipo, siempre que la suma de los sueldos
no supere el presupuesto del club.

FUNCIONAMIENTO:
Se parte de los listas, una para los jugadores disponibles y otra para los jugadores elegidos. Ambas estarán vacías al principio. El programa deberá leer los datos de los jugadores disponibles, cuyo número es inderterminado. Se leerán por teclado hasta que tecleemos un nombre en blanco.

Los datos que nos interesan de cada jugador son:
-Nombre(50 caracteres max.)
-Sueldo(en EUROS)

A continuación se leerá el presupuesto del club, también en EUROS.

Una vez leída toda la información quedará almacenada en memoria y se presentará un menú en pantalla que permita:
-(E)legir: si pulsamos 'E' o 'e', leeremos el nombre del jugador elegido. Si lo encuentra en la lista, lo añadirá a la lista
del equipo, siempre y cuando el presupuesto lo permita.
-(Q)uitar jugador: si pulsamos 'Q' o 'q', eliminaremos un jugador elegido anteriormente. Se leerá su nombre y si está en la lista del equipo, se volverá
a añadir a la lista de jugadores disponibles.
-(S)alir: si pulsamos 'S' o 's', saldremos del programa creando un fichero binario secuencial con los datos de los jugadores disponibles y liberando antes
toda la memoria asignada para la lista de jugadores disponibles.

El programa debe mostrar esto (mas o menos):

Presupuesto: 5000 / Queda: 5000
   Jugadores            Equipo
----------------------------------------------------------
   Casillas(990)
   Raúl(1500)
   Torres(1240)
   Villa(1000)
                  Gasto=0

(E)legir      (Q)uitar jugador                    (S)alir

Si elegieramos a Villa sucedería esto:

Presupuesto: 5000 / Queda: 4000
   Jugadores            Equipo
----------------------------------------------------------
   Casillas(990)            Villa(1000)
   Raúl(1500)
   Torres(1240)
   
                  Gasto=1000

(E)legir      (Q)uitar jugador                     (S)alir



Bien, púes esto es lo que llevo de código y que por supuesto no funciona.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct futbolistas{
        struct futbolistas *sig;
        float sueldo;
        char nombre[50];
}Datos;
typedef Datos *Lista;
typedef Datos *NODO;

int main(){

int i=0,ok,opciones;
float presupuesto = 5000;
Lista *listafutbolistasdisponibles=NULL;
Lista *listafutbolistaselegidos=NULL;

NODO *nuevo=NULL;
NODO *aux=NULL;

do{
      nuevo=(NODO*)malloc(sizeof(NODO));
      puts("Introduzca el nombre del futbolista:\n");
      fflush(stdin);
      fgets(nuevo->nombre,50-1,stdin);
      puts("Introduzca el sueldo del futbolista:\n");
      fflush(stdin);
      scanf("%f",&nuevo->sueldo);
      nuevo->sig=listafutbolistasdisponibles;
                  if(listafutbolistasdisponibles==NULL){
                       listafutbolistasdisponibles=nuevo;                           
                  }else{
                        nuevo->sig=listafutbolistasdisponibles;
                        listafutbolistasdisponibles=nuevo;
                        }
      }while(nuevo->nombre=="");

aux=listafutbolistasdisponibles;
while(aux){
           i++;
           printf("Presupuesto: %f / Queda: %f \n", presupuesto, presupuesto);
           printf("Jugadores \t\t Equipo \n");
           printf("------------------------------------------------ \n");
           printf("%s ( %.2f )\n", aux->nombre,aux->sueldo);
           printf("\t\t Gasto\n");
           aux=aux->sig;
           }
printf("(E)legir \t (Q)uitar jugador\t (S)alir\n");

    system("PAUSE");
    return 0;
}



No he completado todo lo que dice el enunciado por que quiero hacerlo paso a paso y asegurarme de que lo que hago lo hago bien.

Agradecería una respuesta/ayuda, gracias

Hasta pronto(espero).
#8
Gracias Dark Invader, estoy probando el código que me has entregado y puedo sacar bastantes cosas buenas de él, pero sin embargo y siempre y cuando no tengas inconvenientes, me gustaría que me explicarás algunas cosas de tu código que nunca habia visto.
1. Que es exit exactamente, nunca lo habia visto. ¿Cuando lo deberia usar?¿Se le dan valores?, lo digo por lo del 0.
2.¿que hace el gets?¿cuando lo deberia usar?.
3. ¿Que diferencia hay entre el getchar() y el system("pause")?, se usan para lo mismo ¿no?.
4.while(respuesta==!0)- ¿Quiere decir algo asi como que mientras respuesta sea igual o distinta de 0 haz lo que que te indique a continuación?. Yo lo habia vista al reves !=0, pero los iguales ¿cuando debo usarlos?.
5.3. ¿Se podria hacer lo que se pide sin recurrir a una estructura de datos?. Uno de los objetivos del ejercicio es hacer lo que se pide a través de arrays y funciones. Lo siento, eso no lo habia dicho desde el principio.

Estoy intentando que muestre los datos almacenados, pero no me muestra únicamente los datos que introduzco,¿que debo hacer par que me muestre solo lo que introduzco?, es decir, si introduzco 2 jugadores, que solo me muestre esos 2 jugadores.
Dejo de nuevo mi codigo y un ejemplo de ejecución/compilación del mismo:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>


struct fichajes{
float sueldo;
char cadena[20];
};
int main (void){
    struct fichajes jugadores[11];
     int i,j,ok,respuesta;
      float presupuesto = 500000000;
      float presupuesto1[11];

     printf("Vamos a fichar jugadores\n(tiene que fichar 11 jugadores)\n");
     do{
for (i=0;i<2;i++)
             {
                        printf("Introduzca el nombre del jugador %d: ",i+1);
                        fflush(stdin);
                        gets(jugadores[i].cadena);
                        printf("El jugador %s cobra: ",jugadores[i].cadena);
                        scanf("%f",&jugadores[i].sueldo);
                        presupuesto1[i] = presupuesto - jugadores[i].sueldo;
                        printf("le quedan %f euros.",presupuesto1[i]);
                        printf("tiene %d jugadores de momento \n",i);
                       
              }
         printf("Desea fichar mas jugadores? Pulse:0-SI o 1-NO \n");
         scanf("%d",&respuesta);
         if(presupuesto<jugadores[i].sueldo){
         printf("ya no queda mas dinero");
        }
}while(respuesta==0);
                 //  exit(0);
                                for(i=0;i<11;i++){
    printf("El jugador numero %d que se llama: %s ", i+1,jugadores[i].cadena);
    printf("y cobra %f euros\n ", presupuesto1[i]);
           }
       
    if (i>1){
        printf("\nHas fichado %d jugadores \n",i);
        }  else
               printf("\nHas fichado 1 jugador\n");

system("pause");
fflush(stdin);
return 0;
}





COMPILACIÓN/EJECUCIÓN:
Vamos a fichar jugadores
(tiene que fichar 11 jugadores)
Introduzca el nombre del jugador 1: PEPE
El jugador PEPE cobra: 600000
le quedan 499400000.000000 euros.tiene 0 jugadores de momento
Introduzca el nombre del jugador 2: MANOLO
El jugador MANOLO cobra: 4000000
le quedan 496000000.000000 euros.tiene 1 jugadores de momento
Desea fichar mas jugadores? Pulse:0-SI o 1-NO
1
El jugador numero 1 que se llama: PEPE y cobra 600000.000000 euros
El jugador numero 2 que se llama: MANOLO y cobra 4000000.000000 euros
El jugador numero 3 que se llama: ↑☼> y cobra 0.000000 euros
El jugador numero 4 que se llama: h♫> y cobra 0.000000 euros
El jugador numero 5 que se llama: àsÚv y cobra 23674690270553925000000000000000
00.000000 euros
El jugador numero 6 que se llama: └■" y cobra 0.000000 euros
El jugador numero 7 que se llama: ♥£°v y cobra 0.000000 euros
El jugador numero 8 que se llama:  y cobra 0.000000 euros
El jugador numero 9 que se llama: È■" y cobra 252169917953230580000000000000000
0.000000 euros
El jugador numero 10 que se llama: ►£°vª▓¨v ☼> y cobra -1.#QNAN0 euros
El jugador numero 11 que se llama:  y cobra 2532206505100750300000000000000000.
000000 euros

Has fichado 11 jugadores
Presione una tecla para continuar . . .

Gracias de nuevo y agradeceria una respuesta
Hasta pronto.
#9
Hola a todos, me estreno en este foro con un programa que consiste en fichar jugadores para un equipo de fútbol. Para ello tengo un presupuesto de 50,000,000 de euros y cada vez que fiche un jugador, debo de introducir el sueldo a pagar del jugador, el cúal, se restará al presupuesto que tengo. Os muestro el código que he hecho y después os explico mis dudas/problemas.
Antes de mostrarlo, me gustaría aclarar que soy primerizo en esto de la programación y no domino bien el concepto de almacenaje de datos en un array y en una variable en general, por lo que seguramente habrá cosas innecesarias.

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 50

void restarpresupuesto(float a, float b);

int main(){
int i,j,ok,respuesta;
float sueldo[N];
char cadena[5][N];
float presupuesto = 50000000 ;
printf("Vamos a fichar jugadores\n");
do{
              for(i=0;i<2;i++){
                        printf("Introduzca el nombre del jugador %d: ",i+1);
                        fflush(stdin);
                        fgets(cadena,N-1,stdin);
                        printf("El jugador %s cobra: ",cadena);
                        scanf("%f",&sueldo[N]);
                        restarpresupuesto(sueldo[N],presupuesto);
                       
                        }
        printf("Desea fichar mas jugadores? Pulse:0-SI o 1-NO \n");
         scanf("%d",&respuesta);
}while(respuesta==0);
printf("EL EQUIPO ESTA FORMADO POR:\n");
   
for(i=0;i<2;i++){
    printf("El jugador numero %d que se llama: %s ", i+1,cadena);
    printf("y cobra %f euros\n ", sueldo[N]);
           }
       
    if (i>1){
        printf("\nHas fichado %d jugadores \n",i);
        }  else
               printf("\nHas fichado 1 jugador\n");

system("pause");
fflush(stdin);
return 0;
}

   void restarpresupuesto(float a, float b){
         float presupuestofinal;
         presupuestofinal=(b - a);
         printf("Le queda %f euros de presupuesto \n",presupuestofinal );
}


1. Quisiera saber como puedo hacer para que cada vez que introduzca sueldos de los jugadores, eston se resten al presupuesto partiendo del resultado de la resta anterior. Ejemplo: Parto de 5000 euros, el jugador 1 cobra 400, me quedan 4600, para cuando introduzca el sueldo del segundo jugador, quiero que la resta se inicie desde 4600 y no desde 5000.
No se como hacerlo.¿Me ayudan?.
2. Cuando muestro los resultados, solo me muestra el primer sueldo que introduzco en todos los jugadores, es decir, si pongo que el primer jugador cobra 500, todos, independientemente de lo que introduzca, van a cobrar 500 euros. En definitiva solo me almacena el primer numero que introduzco. ¿que debo hacer?.
Agradecería una respuesta.

Ejemplo de ejecución/compilacion:
Vamos a fichar jugadores
Introduzca el nombre del jugador 1: PEPE
El jugador PEPE
cobra: 600000
Le queda 49400000.000000 euros de presupuesto
Introduzca el nombre del jugador 2: MANOLO
El jugador MANOLO
cobra: 234234
Le queda 49765768.000000 euros de presupuesto
Desea fichar mas jugadores? Pulse:0-SI o 1-NO
1
EL EQUIPO ESTA FORMADO POR:
El jugador numero 1 que se llama: PEPE
y cobra 234234.000000 euros
El jugador numero 2 que se llama: MANOLO
y cobra 234234.000000 euros

Has fichado 2 jugadores
Presione una tecla para continuar . . .

Gracias por su atención y espero que me puedan ayudar
Hasta pronto (Espero).