BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

Estructuras C++

BocaDePez

Buenas Noches,

Me podrían colaborar completando el siguiente programa: Ya logre Agregar el vehículo y consultarlo, pero no he podido eliminarlo ni modificarlo.

Les agradeceria su colaboracion.

#include

using namespace std;

char pais[][12] = {"Francia", "Alemania", "EE.UU", "China", "Inglaterra"} ;

const int FIN = 9;

struct Marca {

char nombre[40];

int nacion;

};

struct Vehiculo {

Marca marca;

char placa[10];

float kilometraje;

float combustible; // galones contenidos en el tanque

float capacidad; // del tanquie de combustible

};

void menu(int &);

void agregaVehiculo(Vehiculo []);

void consultaVehiculo(Vehiculo []);

void eliminaVehiculo(Vehiculo []);

void modificaVehiculo(Vehiculo []);

void pausa() {

cin.get(); cin.get();

}

int main() {

Vehiculo carro[100] = {};

int opc = 0;

do {

system("cls"); // borra pantalla

menu(opc);

switch(opc) {

case 1:

agregaVehiculo(carro);

break;

case 2:

consultaVehiculo(carro);

break;

case 3:

eliminaVehiculo(carro);

break;

case 4:

modificaVehiculo(carro);

break;

}

} while(opc!=FIN);

pausa();

}

void menu(int &p) {

cout << "MENU PRINCIPAL\n\n"

<< "0. Manejo de marcas\n"

<< "1. Agregar nuevo vehiculo\n"

<< "2. Consultar vehiculo\n"

<< "3. Eliminar vehiculo\n"

<< "4. Modificar vehiculo\n"

<< "9. Finalizar\n\nDigite su opcion [1-4, 9]: ";

cin >> p;

}

void agregaVehiculo(Vehiculo car[]) {

int q = 0;

while (strcmp(car[q].marca.nombre, ""))

q++;

cout <<"Marca: ";

cin >> car[q].marca.nombre;

cout <<"Placa: ";

cin >> car[q].placa;

car[q].kilometraje = 0;

car[q].combustible = 10;

cout <<"Capacidad tanque (gls): ";

cin >> car[q].capacidad;

}

void consultaVehiculo(Vehiculo car[]) {

for (int k=0; strcmp(car[k].marca.nombre, ""); k++)

cout << car[k].marca.nombre << "\t" << car[k].placa << "\t"

<< car[k].kilometraje << " kms\t" << car[k].combustible << " gls"

<< car[k].capacidad << " gls\n";

pausa();

}

void eliminaVehiculo(Vehiculo car[]) {

}

void modificaVehiculo(Vehiculo car[]) {

}

mceds

Ya que pide usted que le hagamos los deberes del colegio, al menos especifique qué es lo que no entiende, qué ha intentado para resolver el problema y qué dificultades se ha encontrado. Mostrarnos un flamante espacio en blanco y decir "rellénenmelo" no va a funcionar.

Se supone que está usted aprendiendo un lenguaje para desarrollarlo más adelante en el ámbito profesional. ¿Va a seguir recurriendo a la ayuda desinteresada cada vez que se encuentre una función para la cual no es capaz de escribir ni una mísera línea?

Alex B

Tio, utilizando C++ ¿¿porque no utilizas clases??? te va a quedar mucho mas ordenado, entendible y manejable.

Puedes crearte un método que maneje el array que pretendes tener.

Si lo vas a hacer con estructuras dentro del main, eso es una chapuza o de C a secas.

Luego no es bueno que desde ahora te acostumbres a utilizar estructuras estáticas, es mejor utilizar apuntadores y en el peor caso reservar el espacio (o bien utilizar unas de las librerias de C++ para manejar estructuras).

Yo no te voy a hacer los deberes ,porque todos estamos cansados de ver gente así en los foros que intentan que te hagan los deberes, pero como tú en su momento no sabia muchas cosas y me toco preguntar pero no tan descaradamente como lo haces tú, pero lo que si puedo hacer es darte una idea.

Siguiendo tu base (que no estoy de acuerdo por lo de arriba)... eliminar:

1º-Localiza buscando en todo el array y comparando el vehículo (te faltaria crear un campo id para que sea unequivoco y más rápido de comparar, pero bueno..)

2º-Como tu array es estatico (por eso insisto en dinamico), si lo localizas, debes desplazar todos los elementos de la derecha una posición para que ocupen el espacio liberado, esto implica coste computacional, si fuese dinamico solo seria cambiar un apuntador.

Para modificar la idea es el punto 1º anterior + cambiar datos.

No seas vago y ponte al trabajo.

🗨️ 1
Alex B

Te detallo mas la función eliminar que viendo que muy probablemente no sabes pasar cosas por referencia o por valor.

Opción A:Pasar por referencia (mejor) , opción B: pasar por copia

1ºA-Pasar a la función de eliminar la estructura por referencia

1ºB-Pasar a la función de eliminar la estructura por copia

2ºA Localizar el buscado en todo el array , una vez encontrado , desplazar todos los elementos de la derecha una posición para ocupar el eliminado ( si fuese dinámico solo habría que cambiar el apuntador).

2ºB Copiar todo el array pasado por copia a un array creado internamente en la función excepto el elemento a eliminar.

3ºA-No hay que devolver nada, se ha actualizado en la estructura del main

3ºB-Hay de devolver la nueva array creada y en el main cuando se llama a eliminar asignar el resultado de esta al array principal

Para modificar la idea es el punto 1º anterior + cambiar datos + 3º.