Table of Contents

Informatii generale

Publicare: 3.12.2024
Deadline: 22.12.2024, ora 23:59
Deadline: 03.01.2025, ora 23:59
Deadline: 06.01.2025, ora 23:59

Trebuie respectate regulile de scriere a temei de aici:
https://ocw.cs.pub.ro/courses/poo-is-ab/tema/00

Link încărcare temă https://classroom.github.com/a/O6DR07p0

Schimbati-va numele repository-ului de la Settings
Formatul va fi Tema-2-Grupa-Nume-Prenume, exemplu: Tema-2-322AB-Popescu-Ion

Tema: Minarea de resurse de la asteroizi

Descriere

În această temă se simulează o misiune de minare a resurselor din asteroizi folosind rachete, fiecare cu propriile caracteristici și costuri de operare. Scopul este de a optimiza folosirea resurselor și costurilor asociate, maximizând profitul obținut din vânzarea resurselor extrase. Aceasta presupune calcularea costurilor cu combustibil, profitul brut și net, și evaluarea eficienței fiecărei rachete în funcție de performanțele sale în misiuni multiple.

Cerințe

Rulare cu parametri în linia de comandă

Programul trebuie să fie rulat cu parametri în linia de comandă, unde `argv[1]` este `rachete.csv`, `argv[2]` este `asteroizi.csv` și `argv[3]` este `piata.csv`.

Exemplu de rulare:

```bash ./program rachete.csv asteroizi.csv piata.csv

Structura Fișierelor

Separatorul pentru fisierele .csv va fi caracterul ;

Fișiere de intrare

rachete.csv

| ID Rachetă | Capacitate (kg) | Consum combustibil (kg/1000 km) | Combustibil disponibil (kg) | Preț combustibil ($/kg) |
|------------|-----------------|---------------------------------|-----------------------------|-------------------------|
| R1         | 5000            | 150                             | 10000                       | 2                       |
| R2         | 3000            | 120                             | 8000                        | 1.8                     |

asteroizi.csv

| ID Asteroid | Resursă   | Cantitate totală (kg)| Randament extracție (%)  | Distanță (km) |
|-------------|-----------|----------------------|--------------------------|---------------|
| A1          | Aur       | 2000                 | 75                       | 500           |
| A2          | Fier      | 5000                 | 90                       | 3000          |
| A2          | Cupru     | 1000                 | 82                       | 3000          |

Distanta este cea dintre locul unde e racheta si locatia asteroidului, pentru o calatorie pana la asteroid distanta parcursa va fi dubla deoarece racheta va face un drum dus-intors.

piata.csv

| Resursă   | Preț minim ($/kg) | Preț maxim ($/kg) |
|-----------|-------------------|-------------------|
| Aur       | 130               | 600               |
| Fier      | 60                | 120               |
| Cupru     | 120               | 220               |

Pretul unei resurse nu este constant el fluctueaza in functie de cat de mult s-a minat din acea resursa. Vezi capitolul de calcule.

Fișiere de ieșire

misiuni.csv

| ID Rachetă | ID Asteroid | Resursă   | Cantitate extrasă (kg) | Combustibil consumat (kg) | Cost combustibil ($) | Profit brut ($) | Profit net ($) |
|------------|-------------|-----------|------------------------|---------------------------|----------------------|-----------------|----------------
| R2         | A1          | Aur       | 1500                   | 120                       | 216                  | 900,000         | 899,784        |
| R2         | A2          | Fier      | 3000                   | 720                       | 1296                 | 360,000         | 358,704        |
| R2         | A2          | Fier&Cupru| 2320                   | 720                       | 1296                 | 360,400         | 359,104        |

Daca intr-o misiune minati mai multe resurse simultan de la un asteroid, scrieti resursele separate de caracterul &

profit_total.csv

| ID Rachetă | Profit brut ($) | Cost total combustibil ($) | Profit net ($) |
|------------|-----------------|----------------------------|----------------|
| R1         | 0               | 0                          | 0              |
| R2         | 1,620,400       | 2808                       | 1,617,592      |

=== profit_pe_resursa.csv ===

profit_resursa.csv

| Resursă   | Cantitate extrasă (kg) | Profit brut ($) |
|-----------|------------------------|-----------------|
| Aur       | 1500                   | 900,000         |
| Fier      | 4500                   | 540,000         |
| Cupru     | 820                    | 180,400         |

clasament_rachete.csv

| Loc | ID Rachetă | Profit net ($) | Număr misiuni | Scor eficiență |
|-----|------------|----------------|---------------|----------------|
| 1   | R2         | 1,617,192      | 3             | 539,064        |
| 2   | R1         | 0              | 0             | 0              |

Teste

Punctaj - 15 puncte

Depunctări: Vor exista depunctări pentru:

  1. Sintaxă și reguli de scriere.
  2. Neeliberarea memoriei.

Cerințe pentru README

  1. În fișierul README.md, includeți următoarele informații:
    1. Numele și grupa.
    2. Sistemul de operare și IDE-ul utilizat.
    3. Descrierea temei și o explicație a funcționalității programului.
    4. Explicația funcției `int main`: de ce este structurat astfel și cum funcționează.
  1. Notă: Pentru a obține punctajul maxim, programul trebuie să treacă toate cele 7 teste de verificare și să conțină un fișier README complet.

Calculul Prețului Actual al Resurselor

Prețul actual al resurselor se va calcula pe baza prețului maxim inițial, iar după fiecare vânzare de 10,000 kg de resurse, prețul va scădea cu 10%. Totuși, prețul nu va scădea niciodată sub prețul minim stabilit pentru fiecare resursă. Formula de calcul este:

1. **Prețul inițial** este prețul maxim din fișierul `piata.csv`.
2. **Calculul Prețului Actual**:
   - Dacă resursa a fost vândută în cantitate de 10,000 kg sau mai mult, prețul se va reduce astfel:
     ```
     Preț actual = Preț actual * 0.9
     ```
   - Prețul nu poate scădea sub prețul minim:
     ```
     Preț actual = max(Preț actual, Preț minim)
     ```

Astfel, la fiecare 10,000 kg de resurse vândute, prețul se va ajusta în funcție de acest calcul.

Exemplu: Daca am vandut in total 10,300 kg fier

  • 10 000 kg fier vor fi la pretul initial
  • 300 kg fier vor fi la pretul initial * 0.9

Calculul Consumul de Combustibil

Pentru fiecare misiune, consumul de combustibil se va calcula pe baza distanței și a consumului de combustibil pe 1000 km al fiecărei rachete. Având în vedere că drumul este dus-întors, distanța va trebui să fie dublată.

1. **Formula pentru calculul consumului de combustibil**:
   ```
   Consum combustibil = (Distanta * 2) * (Consum combustibil / 1000)
   ```
   Unde:
   - **Distanta**: distanța către asteroid (din fișierul `asteroizi.csv`).
   - **Consum combustibil**: consumul de combustibil al rachetei pe 1000 km (din fișierul `rachete.csv`).
   - **Multiplicăm distanța cu 2** pentru a ține cont de drumul dus-întors.

Calculul Profitului Brut

Profitul brut pentru fiecare misiune se va calcula prin înmulțirea cantității de resurse extrase cu prețul actual al resursei. Formula este:

1. **Formula pentru calculul profitului brut**:
   ```
   Profit brut = Cantitate extrasă (kg) * Preț actual ($/kg)
   ```
   Unde:
   - **Cantitatea extrasă** este cantitatea de resursă extrasă în fiecare misiune, ținând cont de randamentul extracției.
   - **Preț actual** este prețul actual calculat mai sus.

Calculul Costului cu Combustibilul

Costul combustibilului pentru fiecare misiune se va calcula înmulțind consumul de combustibil cu prețul combustibilului pe kilogram (din fișierul `rachete.csv`):

1. **Formula pentru calculul costului combustibilului**:
   ```
   Cost combustibil = Consum combustibil (kg) * Preț combustibil ($/kg)
   ```

Calculul Profitului Net

Profitul net este rezultatul obținut prin scăderea costului combustibilului din profitul brut:

1. **Formula pentru calculul profitului net**:
   ```
   Profit net = Profit brut - Cost combustibil
   ```

Acest calcul va fi realizat pentru fiecare misiune, iar totalul profitului net pentru fiecare rachetă va fi calculat prin adunarea profitului net din toate misiunile realizate de acea rachetă.

Calculul Eficienței Rachetelor

Eficiența fiecărei rachete va fi evaluată pe baza profitului net obținut și a numărului de misiuni realizate. Scorul de eficiență va fi calculat astfel:

1. **Formula pentru scorul de eficiență**:
   ```
   Scor eficiență = Profit net / Număr misiuni
   ```

Scorul de eficiență va ajuta la evaluarea performanței fiecărei rachete în funcție de cantitatea de profit net realizată în raport cu numărul de misiuni efectuate. O rachetă care a realizat mai multe misiuni, dar cu un profit net mic, va avea un scor de eficiență mai mic decât o rachetă care a realizat mai puține misiuni dar cu un profit net mai mare.

Aceste calcule vor ajuta la evaluarea performanței fiecărei rachete și la optimizarea procesului de extragere și vânzare a resurselor din asteroizi.