online: 2; azi: 430; total: 50885 Manual clasa a xi a - Implementarea structurilor de date - Lista liniara

Probleme Rezolvate



Manual clasa a Xi a

Implementarea structurilor de date

Lista liniara

Într un depou există o linie pe care se găsesc mai multe locomotive, aranjate în ordinea în care au intrat în depou, şi o linie pe care se găsesc mai multe vagoane, aranjate în ordinea în care au intrat în depou. Fiecare locomotivă şi fiecare vagon are un număr de identificare. În plus, pentru fiecare vagon este precizată şi clasa (clasa 1 şi clasa 2). Pentru linia care conţine locomotivele există un triaj cu k linii de manevră. Valoarea pentru k se citeşte de la tastatură. În triajul vagoanelor există o linie de intrare şi o linie de ieşire pe care deplasarea se poate face numai în sensul săgeţilor şi o linie de manevră pe care deplasarea se poate face în ambele sensuri. Scrieţi o aplicaţie in c++ care să asigure următoarele operații prin inter-mediul unui meniu:
a. Intrarea unei locomotive în depou.
b. Afişarea locomotivelor din depou.
c. Intrarea unui vagon în depou.
d. Afişarea vagoanelor din depou, precizându-se câte vagoane sunt de clasa 1 şi câte sunt de clasa 2.
e. Formarea unei garnituri. Garnitura este formată dintr-o locomotivă cu numărul de identificare p şi n vagoane, dintre care m vagoane sunt de clasa 1 (valorile pentru p, n si m se citesc de la tastatură).
Mai întâi, vom defini structurile de date și funcțiile necesare pentru a gestiona depoul, locomotivele și vagoanele. Apoi, vom implementa funcția main pentru a oferi un meniu interactiv.
# include <iostream>
# include <algorithm>
# include <vector>
struct Locomotiva {
int id;
};
struct Vagon {
int id;
int clasa;
};
std::vector<Locomotiva> locomotive;
std::vector<Vagon> vagoane;
void intrare_locomotiva () {
int id;
std::cout << "Introduceti ID-ul locomotivei: " ;
std::cin >> id;
Locomotiva locomotiva{id};
locomotive. push_back (locomotiva);
}
void afisare_locomotive () {
std::cout << "Locomotive in depou: " ;
for ( const Locomotiva &loco : locomotive) {
std::cout << loco.id << " " ;
}
std::cout << std::endl;
}
void intrare_vagon () {
int id, clasa;
std::cout << "Introduceti ID-ul vagonului: " ;
std::cin >> id;
std::cout << "Introduceti clasa vagonului (1 sau 2): " ;
std::cin >> clasa;
Vagon vagon{id, clasa};
vagoane. push_back (vagon);
}
void afisare_vagoane () {
int count_clasa1 = 0 ;
int count_clasa2 = 0 ;
std::cout << "Vagoane in depou: " ;
for ( const Vagon &v : vagoane) {
std::cout << v.id << "(" << v.clasa << ") " ;
if (v.clasa == 1 ) {
count_clasa1++;
} else {
count_clasa2++;
}
}
std::cout << std::endl;
std::cout << "Vagoane de clasa 1: " << count_clasa1 << std::endl;
std::cout << "Vagoane de clasa 2: " << count_clasa2 << std::endl;
}
void formare_garnitura () {
int p, n, m;
std::cout << "Introduceti ID-ul locomotivei: " ;
std::cin >> p;
std::cout << "Introduceti numarul total de vagoane: " ;
std::cin >> n;
std::cout << "Introduceti numarul de vagoane de clasa 1: " ;
std::cin >> m;
int vagoane_clasa2 = n - m;
// Verifica daca exista locomotiva cu ID-ul p
auto it_loco = std:: find_if (locomotive. begin (), locomotive. end (),
[p]( const Locomotiva &loco) { return loco.id == p; });
if (it_loco == locomotive. end ()) {
std::cout << "Nu exista locomotiva cu ID-ul " << p << std::endl;
return ;
}
// Verifica daca exista suficiente vagoane de clasa 1 si 2
int count_clasa1 = std:: count_if (vagoane. begin (), vagoane. end (),
[]( const Vagon &v) { return v.clasa == 1 ; });
int count_clasa2 = std:: count_if (vagoane. begin (), vagoane. end (),
[]( const Vagon &v) { return v.clasa == 2 ; });
if (count_clasa1 < m || count_clasa2 < vagoane_clasa2) {
std::cout << "Nu exista suficiente vagoane pentru a forma garnitura" << std::endl;
return ;
}
// Formarea garniturii
std::cout << "Garnitura formata: " ;
std::cout << "Locomotiva " << p << ", " ;
std::cout << m << " vagoane de clasa 1, " ;
std::cout << vagoane_clasa2 << " vagoane de clasa 2" << std::endl;
}
int main () {
int optiune;
do {
std::cout << "Meniu:\n" ;
std::cout << "1. Intrare locomotiva\n" ;
std::cout << "2. Afisare locomotive\n" ;
std::cout << "3. Intrare vagon\n" ;
std::cout << "4. Afisare vagoane\n" ;
std::cout << "5. Formare garnitura\n" ;
std::cout << "6. Iesire\n" ;
std::cout << "Introduceti optiunea: " ;
std::cin >> optiune;
switch (optiune) {
case 1 :
intrare_locomotiva ();
break ;
case 2 :
afisare_locomotive ();
break ;
case 3 :
intrare_vagon ();
break ;
case 4 :
afisare_vagoane ();
break ;
case 5 :
formare_garnitura();
break ;
case 6 :
std::cout << "Iesire din program" << std::endl;
break ;
default :
std::cout << "Optiune invalida, va rugam sa incercati din nou." << std::endl;
}
} while (optiune != 6 );
r eturn 0;
}