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

  • Citirea fișierelor de intrare:
    1. Fișierele de intrare vor conține informațiile despre rachete, asteroizi și prețurile pieței.
      1. rachete.csv: detalii despre rachete, inclusiv capacitatea de transport, consumul de combustibil, combustibilul disponibil și prețul combustibilului.
      2. asteroizi.csv: informații despre asteroizi, incluzând resursele disponibile, cantitatea totală, randamentul extracției și distanța până la asteroid.
      3. piata.csv: prețurile resurselor pe piață, inclusiv prețul minim și maxim per kilogram

  • Calcularea misiunilor:
    1. Se vor calcula misiunile rachetelor pentru fiecare asteroid, începând cu extragerea resurselor de la primul asteroid și continuând cu extragerea resurselor de la al doilea asteroid, dacă este necesar. Pentru fiecare misiune, se vor calcula următoarele:
      1. Cantitatea extrasă (kg): cantitatea de resursă pe care o poate extrage racheta, în funcție de randament și de capacitatea rachetei.
      2. Combustibil consumat (kg): cantitatea de combustibil consumată pentru a ajunge la asteroid și înapoi, ținând cont de distanță și consumul pe 1000 km.
      3. Cost combustibil ($): costul combustibilului utilizat în misiune, calculat pe baza prețului pe kilogram.
      4. Profit brut ($): profitul obținut prin vânzarea resurselor extrase, calculat pe baza prețului actual de pe piață.
      5. Profit net ($): profitul obținut după deducerea costului combustibilului din profitul brut.
  • Calcularea profitului total pe rachete:
    1. Se va calcula profitul total obținut de fiecare rachetă, pe baza misiunilor realizate, inclusiv profitul brut, costul total al combustibilului și profitul net.
  • Calcularea profitului pe resursă:
    1. Se va calcula profitul brut și cantitatea totală extrasă pentru fiecare resursă în parte (Aur, Fier, Cupru).
  • Clasament al rachetelor:
    1. Rachetele vor fi clasificate în funcție de profitul net obținut din misiuni, iar eficiența fiecărei rachete va fi evaluată pe baza scorului de eficiență (Profit net împărțit la numărul de misiuni realizate).

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

  • test0:
    • 1 Asteroid, 1 Rachetă, 1 Resursă
    • test basic
  • test1:
    • 1 Asteroid, 1 Rachetă, 2 Resurse
    • verificare implementare asteroid cu 2 resurse daca functioneaza
  • test2:
    • 1 Asteroid, 3 Rachete, 1 Resurse
    • verificare implementare alegere din mai multe rachete
    • oricare racheta aleasa este in regula, scopul fiind sa nu fie mai multe alese
  • test3:
    • 2 Asteroizi, 2 Rachete, 3 Resurse
    • testul dat ca exemplu pe ocw la problema
  • test4:
    • 5 Asteriozi, 5 Rachete, 2 Resurse
    • test cu multiple variante de ales pentru cei care vor sa faca o implementare optima
  • test5:
    • 1 Asteroid, 1 Rachetă, 1 Resursă
    • test verificare ca pretul este updatat corect
    • se mineaza multiple cantitati de 10000, deci pretul scade mereu pana la minim
  • test6:
    • 10 Asteriozi, 4 Rachete, 30 Resurse
    • un test mare cu multe combinatii de resurse la asteroizi cu cantitati mari, o parte din resurse nu sunt folosite

Punctaj - 15 puncte

  • test 0 - 3p
  • test 1 - 1p
  • test 2 - 1p
  • test 3 - 1p
  • test 4 - 2p
  • test 5 - 2p
  • test 6 - 2p
  • Total: 12 puncte pentru teste și 3 puncte pentru README.

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.

poo-is-ab/tema/02.txt · Last modified: 2025/01/05 22:48 by marius.trifu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0