Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Practica 1 de 1r de Programacio
- Autors: Pau Pons Clotet i Carles Roch Arnau
- LS_STRATEGIST
- */
- //Inclusio de llibraries
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- #include <stdlib.h>
- #include <time.h>
- //Definicio de constants
- #define MAX_CODI 10
- #define MAX_CHARS 30 //Maxim de caràcters permesos en pilots.nom i altres strings
- #define DATA_LENGTH 8 //Llargada de les strings de data, en format (ddmmaaaa)
- #define MAX_PILOTS 20 //Maxim de pilots
- #define MAX_CHARS_STR 500 //Maxim de caracters de l'input d'informacio a l'opcio 3
- #define MAX_LAPS 11 //Maxim nombre de parades
- //Estructutes
- typedef struct {
- int dorsal;
- char nom[MAX_CHARS];
- int data_dia;
- int data_mes;
- int data_any;
- char compost[MAX_CHARS];
- int num_parades;
- int num_volta_parades[MAX_LAPS];
- int index;
- } Pilots;
- //Funcions
- int custom_atoi(char string[MAX_CHARS_STR]) {
- int result = 0;
- int i;
- if (strlen(string) >= 1) { //Si l'string que ens arriba es nul·la, retornem un -1 per evitar de retornar quelcom valid (0) si l'input no ho es.
- for (i = 0; i < strlen(string); i++) {
- result = (result * 10) + (string[i] - '0');
- }
- } else {
- result = -1;
- }
- return (result);
- }
- //Codi
- int main(){
- //Declaracio de variables
- int opcio_menu;
- //Declaracio de variables auxiliars
- int error; //Aquesta variable la fem servir de flag per activar el missatge d'error si l'usuari introdueix valors erronis
- int i, j, k;
- char aux;
- char array_aux[MAX_CHARS];
- int flag;
- //Variables opcio1: assistent de pneumatics
- int opc1_degradacio, opc1_velocitat_durabilitat; //(ID, IPV)
- int num_pneumatic, num_parades;
- char lletra_pneumatic;
- char opc1_plou;
- int opc1_control; //Variable de control que utilitzarem per saber si hem de l'opcio 1 quan volguem fer la 3.
- //Variables opcio 2: generador de codi
- int opc2_dorsal, opc2_carrera;
- char codi_lletra;
- int codi_xifra1, codi_xifra2;
- int opc2_control; //Variable que utilitzarem per saber si hem fet l'opcio 2 quan volguem fer la 3.
- char opc2_codi[MAX_CODI];
- //Variables opcio 3: comunicar-se amb el pilot
- char opc3_codi_introduit[MAX_CODI];
- int num_pilots;
- Pilots pilots[MAX_PILOTS];
- char opc3_string[MAX_CHARS_STR];
- char opc3_num_carrera[MAX_CHARS];
- char opc3_degradacio[MAX_CHARS];
- char opc3_plou[MAX_CHARS];
- char opc3_voltes[MAX_CHARS];
- char opc3_num_pilots[MAX_CHARS];
- int opc3_custom_atoi; //Variable auxiliar que fem servir per guardar els valors convertits a integreri
- int opc3_pilot_actual; //Variable que fem servir dins d'un bucle com a index del pilot actual
- int opc3_trespas;
- int opc3_control;
- //Variables opcio 4: simulacio de la carrera
- int opc4_control;
- float opc4_chance[MAX_PILOTS];
- int opc4_A, opc4_B, opc4_C, opc4_D, opc4_R;
- int opc4_winner;
- float opc4_top;
- //Inicialitzacio de les variables de control de les opcions 1, 2 i 3
- opc1_control = 0;
- opc2_control = 0;
- opc3_control = 0;
- //Display del missatge de benvinguda
- printf("Benvingut a LS Strategist!\n");
- //Codi global que s'anira executant fins que l'opcio sigui (5)
- while (opcio_menu != 5) {
- //Display del menu
- printf("\nSi us plau, tria una opcio del menu:\n");
- printf("\n 1. Estrategia de pneumatics.");
- printf("\n 2. Obtencio del codi de radio.");
- printf("\n 3. Comuniar-se amb el pilot.");
- printf("\n 4. Simular carrera.");
- printf("\n 5. Sortir.\n");
- //Input de l'opcio seleccionada
- printf("\nOpcio seleccionada: ");
- do {
- scanf("%d", &opcio_menu); //Emmagatzemar input opcio a variable opcio_menu
- //L'input no es valid (0-5) -> mostrar missatge d'error
- if (!((opcio_menu >= 1) && (opcio_menu <= 5))) {
- error = 1;
- printf("\nERROR: Els valors admesos es troben entre l'1 el 5");
- printf("\nSi us plau, torneu a introduir la opcio: ");
- } else {
- error = 0;
- }
- } while(error == 1); //Repeteix si l'input no es valid
- //Switch d'opcio seleccionada
- switch (opcio_menu) {
- //Cas 1: Opcio menu == 1: Assistent pneumatics
- case (1):
- //Display del text
- printf("\nAssistent d'estrategia de pneumatics:\n");
- //Input del opc1_plou
- do {
- printf("Esta provent sobre la pista? (S / N): ");
- scanf("\n%c", &opc1_plou);
- //Deteccio de si l'input es correcte, si no ho es, activem la flag per activar el while
- switch (opc1_plou) {
- case ('s'):
- case ('S'):
- case ('n'):
- case ('N'):
- error = 0;
- break;
- //L'input no es valid (s, S, n, N) -> mostrar missatge d'error
- default:
- error = 1;
- printf("\nERROR: Els valors admesos son n, N, s, S\n");
- }
- } while(error == 1);
- //Input del opc1_degradacio
- do {
- printf("Quin nivell de degradacio provoca la pista sobre el pneumatic? (0-4): ");
- scanf("%d", &opc1_degradacio);
- //L'input no es valid (0-4) -> mostrar missatge d'error
- if (!((opc1_degradacio >= 0) && (opc1_degradacio <= 4))) {
- error = 1;
- printf("\nERROR: Els valors admesos es troben entre el 0 i el 4\n");
- } else {
- error = 0;
- }
- } while (error == 1);
- //Input del opc1_velocitat_durabilitat
- do {
- printf("Com es vol prioritzar la velocitat del pneumatic sobre la durabilitat (1-5): ");
- scanf("%d", &opc1_velocitat_durabilitat);
- //L'input no es valid (1-5) -> mostrar missatge d'error
- if (!((opc1_velocitat_durabilitat >= 1) && (opc1_velocitat_durabilitat <= 5))) {
- error = 1;
- printf("\nERROR: Els valors admesos es troben entre el 1 i el 5\n");
- } else {
- error = 0;
- }
- } while (error == 1);
- //Calcular pneumatic
- //Calcular el valor absolut de ('opc1_degredacio' - 'opc1_velocitat_durabilitat') = 'num_pneumatic' sense la funcio abs()
- num_pneumatic = opc1_degradacio - opc1_velocitat_durabilitat;
- if (num_pneumatic < 0) {
- num_pneumatic = num_pneumatic * (-1);
- }
- //Calcular pneumatic PLOVENT
- if ((opc1_plou == 's' || opc1_plou == 'S')) {
- //Proposar pneumatic Intermedi o Full wet
- if (num_pneumatic >= 3) {
- lletra_pneumatic = 'I'; //Si la diferencia es superior a 3, proposem l'Intermedi (I)
- } else {
- lletra_pneumatic = 'W'; //Si no, proposem el Full Wet (W)
- }
- //Calcular pneumatic NO PLOVENT
- } else {
- if ((opc1_plou == 'n' || opc1_plou == 'N')) {
- lletra_pneumatic = 'C';
- }
- }
- //Calcular parades
- if (opc1_velocitat_durabilitat == 3) {
- num_parades = 2;
- } else {
- if (opc1_velocitat_durabilitat > 3) {
- num_parades = 3;
- } else {
- num_parades = 1;
- }
- }
- //Mostrar pneumnatic i parades
- printf("\n");
- if (lletra_pneumatic == 'I' || lletra_pneumatic == 'W') {
- if (num_parades > 1) {
- printf("El compost adequat es el %c i haureu de realitzar %d parades a boxes",lletra_pneumatic,num_parades);
- } else {
- printf("El compost adequat es el %c i haureu de realitzar una parada a boxes",lletra_pneumatic);
- }
- } else {
- if (num_parades > 1) {
- printf("El compost adequat es el %c%d i haureu re realitzar %d parades a boxes",lletra_pneumatic,num_pneumatic,num_parades);
- } else {
- printf("El compost adequat es el %c%d i haureu de realitzar una parada a boxes",lletra_pneumatic,num_pneumatic);
- }
- }
- opc1_control = 1;
- break;
- //Cas 2, opcio_menu == 2; Codi de radio
- case (2):
- printf("\nGenerador de codi de comunicacio:");
- //Input de dades
- //Input de l'opc2_dorsal
- do {
- printf("\nQuin el nombre de dorsal del pilot amb qui es vol comunicar?(1-99): ");
- scanf("%d", &opc2_dorsal);
- //L'input no es valid (1-99) -> mostrar missatge d'error
- if (!((opc2_dorsal >= 1) && (opc2_dorsal <= 99))) {
- error = 1;
- printf("\nERROR: Els valors admesos es troben entre l'1 i el 99\n");
- } else {
- error = 0;
- }
- } while (error == 1);
- //Input de l'opc2_carrera
- do {
- printf("Quin es el nombre de la cursa en el calendari (1-21): ");
- scanf("%d", &opc2_carrera);
- //L'input no es valid (1-21) -> mostrar missatge d'error
- if (!((opc2_carrera >= 1) && (opc2_carrera <= 21))) {
- error = 1;
- printf("\nERROR: Els valors admesos es troben entre l'1 i el 21\n");
- } else {
- error = 0;
- }
- } while(error == 1);
- //Generador de codi
- //Generador dels components del codi
- codi_lletra = ('A' - 1) + (opc2_dorsal % 27);
- codi_xifra1 = opc2_dorsal / opc2_carrera;
- codi_xifra2 = ((opc2_dorsal) / 26);
- opc2_control = 1;
- //Generacio del string de codi
- if (codi_xifra1 > 9) {
- opc2_codi[0] = codi_lletra;
- opc2_codi[1] = (codi_xifra1 / 10) + '0';
- opc2_codi[2] = (codi_xifra1 % 10) + '0';
- opc2_codi[3] = codi_xifra2 + '0';
- opc2_codi[4] = '\0';
- } else {
- opc2_codi[0] = codi_lletra;
- opc2_codi[1] = codi_xifra1 + '0';
- opc2_codi[2] = codi_xifra2 + '0';
- opc2_codi[3] = '\0';
- }
- printf("\nCODI GENERAT: %s", opc2_codi);
- break;
- //Cas 3, opcio_menu == 3; Comunicacio amb el pilot
- case (3):
- //Comprovar si s'han fet les dues primeres opcions abans de fer aquesta opcio
- if (opc1_control && opc2_control) {
- do {
- printf("\nIntroduiu el codi de radio: ");
- scanf("%s", opc3_codi_introduit);
- scanf("%c", &aux); //Netejar el '\n'
- //L'input no es valid (strcmp != 0) -> mostrar missatge d'error
- if ((strcmp(opc2_codi, opc3_codi_introduit) != 0)) {
- if (strcmp(opc3_codi_introduit, "exit") == 0) { //Sortir de l'opcio 3 introduint exit
- error = 0;
- } else {
- error = 1;
- printf("\nERROR: Aquest codi de radio no existeix\n");
- }
- } else { //El codi s'ha introduit correctament
- printf("\nCodi correcte");
- printf("\nComunicant amb el pilot # %d de la carrera # %d ...", opc2_dorsal, opc2_carrera);
- printf("\n");
- //Comprobem si la primera part del codi es correcte
- error = 1;
- while (error == 1) {
- printf("\nIntroduiu la informacio:\n");
- fgets(opc3_string, MAX_CHARS_STR, stdin); //Guardem tota la string de caracters a opc3_string
- opc3_string[(strlen(opc3_string) - 1)] = '\0'; //Netejem el '\n' que s'ha quedat
- if (strcmp(opc3_string, "debug2") == 0) {
- stpcpy(opc3_string, "1|2|n|10|2|34-Pau Pons-22/03/2001-C4-2-4/8|6-Carles Roch-22/11/2001-C4-1-6");
- }
- if (strcmp(opc3_string, "debug3") == 0) {
- stpcpy(opc3_string, "1|2|n|10|3|34-Pau Pons-22/03/2001-C4-2-4/8|6-Carles Roch-22/11/2001-C4-1-6|66-Daniel Amo-09/04/1976-C3-1-3");
- }
- if (!(strcmp(opc3_string, "exit") == 0)) {
- //Numero de carrera
- j = 0;
- for (i = 0; opc3_string[i] != '|' && i < MAX_CHARS_STR; i++) {
- opc3_num_carrera[j] = opc3_string[i];
- j++;
- }
- opc3_num_carrera[j] = '\0';
- opc3_custom_atoi = custom_atoi(opc3_num_carrera); //Fem servir aquesta variable auxiliar per guardar l'custom_atoi d'opc3_num_volte
- if (!(opc3_custom_atoi >= 1 && opc3_custom_atoi <= 21)) {
- error = 1;
- printf("\nERROR: El nombre de carrera és incorrecte!");
- } else {
- //Nivell degradacio
- j = 0;
- i++;
- while (opc3_string[i] != '|' && i < MAX_CHARS_STR) {
- opc3_degradacio[j] = opc3_string[i];
- j++;
- i++;
- }
- opc3_degradacio[j] = '\0';
- opc3_custom_atoi = custom_atoi(opc3_degradacio); //Fem servir aquesta variable auxiliar per guardar l'custom_atoi d'opc3_degradacio
- if (!(opc3_custom_atoi >= 0 && opc3_custom_atoi <= 4)) {
- error = 1;
- printf("\nERROR: El nombre de degradacio és incorrecte!");
- } else {
- //Plou
- j = 0;
- i++;
- while (opc3_string[i] != '|' && i < MAX_CHARS_STR) {
- opc3_plou[j] = opc3_string[i];
- j++;
- i++;
- }
- opc3_plou[j] = '\0';
- if (strlen(opc3_plou) == 1) {
- if (((strcmp(opc3_plou, "N") == 0) || (strcmp(opc3_plou, "n") == 0) || (strcmp(opc3_plou, "S") == 0) || (strcmp(opc3_plou, "s") == 0))) {
- //Numero de voltes
- j = 0;
- i++;
- while (opc3_string[i] != '|' && i < MAX_CHARS_STR) {
- opc3_voltes[j] = opc3_string[i];
- i++;
- j++;
- }
- opc3_voltes[j] = '\0';
- opc3_custom_atoi = custom_atoi(opc3_voltes);
- if (!(opc3_custom_atoi >= 0 && opc3_custom_atoi <= 10)) {
- printf("ERROR: format de voltes és incorrecte!");
- } else {
- //Num pilots (2-20)
- j = 0;
- i++;
- while (opc3_string[i] != '|' && i < MAX_CHARS_STR) {
- opc3_num_pilots[j] = opc3_string[i];
- i++;
- j++;
- }
- opc3_num_pilots[j] = '\0';
- opc3_custom_atoi = custom_atoi(opc3_num_pilots);
- num_pilots = custom_atoi(opc3_num_pilots);
- if (!(opc3_custom_atoi >= 2 && opc3_custom_atoi <= 20)) {
- printf("ERROR: format de nombre de pilots és incorrecte!");
- } else {
- for (opc3_pilot_actual = 0; opc3_pilot_actual < num_pilots && opc3_pilot_actual < 20; opc3_pilot_actual++) { //Magic number 20
- j = 0;
- i++;
- //Guardem l'ordre del pilot
- pilots[opc3_pilot_actual].index = opc3_pilot_actual;
- //Guardem el dorsal
- j = 0;
- while ((opc3_string[i] != '-') && i < MAX_CHARS_STR) {
- array_aux[j] = opc3_string[i];
- i++;
- j++;
- }
- array_aux[j] = '\0';
- pilots[opc3_pilot_actual].dorsal = custom_atoi(array_aux);
- //Verifiquem el dorsal
- if (!(pilots[opc3_pilot_actual].dorsal >= 1 && pilots[opc3_pilot_actual].dorsal <= 99)) {
- printf("ERROR al pilot %d: format de nombre de dorsal és incorrecte!", opc3_pilot_actual + 1);
- error = 1;
- } else {
- //Verificació de nom
- j = 0;
- i++;
- while (opc3_string[i] != '-' && i < MAX_CHARS_STR) {
- pilots[opc3_pilot_actual].nom[j] = opc3_string[i];
- i++;
- j++;
- }
- pilots[opc3_pilot_actual].nom[j] = '\0';
- if (!(strlen(pilots[opc3_pilot_actual].nom) <= 25)) {
- printf("ERROR al pilot %d: el nom supera els 25 caràcterns", opc3_pilot_actual + 1);
- } else {
- //Guardem la data de naixement
- //Guardem el dia
- j = 0;
- i++;
- while (opc3_string[i] != '/' && i < MAX_CHARS_STR) {
- array_aux[j] = opc3_string[i];
- i++;
- j++;
- }
- array_aux[j] = '\0';
- pilots[opc3_pilot_actual].data_dia = custom_atoi(array_aux);
- //Guardem el mes
- j = 0;
- i++;
- while ((opc3_string[i] != '/') && i < MAX_CHARS_STR) {
- array_aux[j] = opc3_string[i];
- i++;
- j++;
- }
- array_aux[j] = '\0';
- pilots[opc3_pilot_actual].data_mes = custom_atoi(array_aux);
- //Guardem l'any
- j = 0;
- i++;
- while (opc3_string[i] != '-' && i < MAX_CHARS_STR) {
- array_aux[j] = opc3_string[i];
- i++;
- j++;
- }
- array_aux[j] = '\0';
- pilots[opc3_pilot_actual].data_any = custom_atoi(array_aux);
- //Comprovar si es un any de trespas
- if (((pilots[opc3_pilot_actual].data_any%100)%4) == 0) {
- //Les dues ultimes xifres son multiples de 4
- if ((pilots[opc3_pilot_actual].data_any%100) == 0) {
- if (((pilots[opc3_pilot_actual].data_any/100)%4) == 0) {
- //any de trespas
- opc3_trespas = 1;
- } else {
- //no es trespas
- opc3_trespas = 0;
- }
- } else {
- //any de trespàs
- opc3_trespas = 1;
- }
- } else {
- //no es trespas
- opc3_trespas = 0;
- }
- //Comprovar data
- if (opc3_trespas) {
- //Any de trespas
- if (pilots[opc3_pilot_actual].data_mes == 2) {
- if (pilots[opc3_pilot_actual].data_dia >= 1 && pilots[opc3_pilot_actual].data_dia <= 29) {
- error = 0;
- } else {
- error = 1;
- printf("ERROR al pilot %s: El dia no es correcte!", pilots[opc3_pilot_actual].nom);
- }
- } else {
- if (pilots[opc3_pilot_actual].data_mes >= 1 && pilots[opc3_pilot_actual].data_mes <= 12 && pilots[opc3_pilot_actual].data_mes != 2) {
- if (pilots[opc3_pilot_actual].data_dia >= 1 && pilots[opc3_pilot_actual].data_dia <= 31) {
- error = 0;
- } else {
- error = 1;
- printf("ERROR al pilot %s: El dia no es correcte!", pilots[opc3_pilot_actual].nom);
- }
- } else {
- error = 1;
- printf("ERROR al pilot %s: El mes no es correcte!", pilots[opc3_pilot_actual].nom);
- }
- }
- } else {
- //No any de trespas
- if (pilots[opc3_pilot_actual].data_mes == 2) {
- if (pilots[opc3_pilot_actual].data_dia >= 1 && pilots[opc3_pilot_actual].data_dia <= 28) {
- error = 0;
- } else {
- error = 1;
- printf("ERROR al pilot %s: El dia no es correcte!", pilots[opc3_pilot_actual].nom);
- }
- } else {
- if (pilots[opc3_pilot_actual].data_mes >= 1 && pilots[opc3_pilot_actual].data_mes <= 12 && pilots[opc3_pilot_actual].data_mes != 2) {
- if (pilots[opc3_pilot_actual].data_dia >= 1 && pilots[opc3_pilot_actual].data_dia <= 31) {
- error = 0;
- } else {
- error = 1;
- printf("ERROR al pilot %s: El dia no es correcte!", pilots[opc3_pilot_actual].nom);
- }
- } else {
- error = 1;
- printf("ERROR al pilot %s: El mes no es correcte!", pilots[opc3_pilot_actual].nom);
- }
- }
- }
- if (!error) {
- //Guardar el compost
- j = 0;
- i++;
- while (opc3_string[i] != '-' && i < MAX_CHARS_STR) {
- pilots[opc3_pilot_actual].compost[j] = opc3_string[i];
- i++;
- j++;
- }
- pilots[opc3_pilot_actual].compost[j] = '\0';
- //Guardar i verificar el nombre de parades
- j = 0;
- i++;
- while (opc3_string[i] != '-' && i < MAX_CHARS_STR) {
- array_aux[j] = opc3_string[i];
- i++;
- j++;
- }
- array_aux[j] = '\0';
- pilots[opc3_pilot_actual].num_parades = custom_atoi(array_aux);
- if (!(pilots[opc3_pilot_actual].num_parades > 0 && pilots[opc3_pilot_actual].num_parades < 11)) {
- printf("ERROR al pilot %s: format de nombre de parades és incorrecte!", pilots[opc3_pilot_actual].nom);
- } else {
- //Guardar i comprovar voltes de parada
- i++;
- flag = 0;
- k = 0;
- while (!flag && i < MAX_CHARS_STR) {
- j = 0;
- while (opc3_string[i] != '/' && opc3_string[i] != '|' && i < MAX_CHARS_STR) {
- array_aux[j] = opc3_string[i];
- i++;
- j++;
- }
- if (opc3_string[i] == '|') {
- flag = 1;
- } else {
- i++;
- }
- array_aux[j] = '\0';
- pilots[opc3_pilot_actual].num_volta_parades[k] = custom_atoi(array_aux);
- k++;
- }
- if (!(k == pilots[opc3_pilot_actual].num_parades)) {
- printf("ERROR al pilot %s: nombre de voltes de parada no coincideix amb nombre de voltes", pilots[opc3_pilot_actual].nom);
- error = 1;
- } else {
- error = 0;
- opc3_control = 1;
- printf("\nInformacio validada i enviada correctament per al pilot %s!", pilots[opc3_pilot_actual].nom);
- }
- }
- }
- }
- }
- }
- }
- }
- } else {
- printf("\nERROR: El format de plou es incorrecte!");
- error = 1;
- }
- } else {
- printf("\nERROR: El format de plou es incorrecte!");
- error = 1;
- }
- }
- }
- } else {
- if ((strcmp(opc3_string, "exit")) == 0) {
- error = 0;
- opc3_control = 0;
- printf("\nSortint de l'opcio 3");
- }
- }
- } //Fins aqui, l'usuari introdueix el codi
- }
- } while (error == 1);
- } else {
- if (!opc2_control) {
- printf("\nERROR: Encara no s'ha generat cap codi de xifrat per a la radio\n");
- } else {
- if (!opc1_control) {
- printf("\nERROR: Encara no s'han introduit les dades de la carrera (Fer opcio 1)\n");
- }
- }
- }
- printf("\n");
- break;
- //Cas 4, opcio_menu == 4; Simulacio de la carrera
- case (4):
- //Generador de nombres pseudoaleatoris
- srand(time(0));
- //Comprovar si s'han efectuat les anteriors opcions
- if (!(opc1_control && opc2_control && opc3_control)) {
- if (opc1_control) {
- array_aux[0] = '2';
- } else {
- array_aux[0] = '1';
- }
- if (opc2_control) {
- array_aux[1] = '2';
- } else {
- array_aux[1] = '1';
- }
- if (opc3_control) {
- array_aux[2] = '2';
- } else {
- array_aux[2] = '1';
- }
- array_aux[3] = '\0';
- opc4_control = custom_atoi(array_aux);
- switch (opc4_control){
- case (211):
- printf("ERROR: No s'ha configurat el codi de radio ni s'ha comunicat amb el pilot");
- break;
- case (221):
- printf("ERROR: No s'ha comunicat amb el pilot");
- break;
- case (121):
- printf("ERROR: No s'ha configurat l'estrategia de pneumatics ni s'ha comunicat amb el pilot");
- break;
- case (112):
- printf("ERROR: No s'ha configurat l'estrategia de pneumatics ni el codi de radio");
- break;
- case (111):
- printf("ERROR: No s'ha configurat l'estrategia de pneumatics, el codi de radio ni s'han transmes les dades al pilot");
- break;
- }
- printf("\n");
- } else {
- for (i = 0; i < num_pilots; i++) {
- //Calcular parametre A
- if (lletra_pneumatic == pilots[i].compost[0]) {
- if (lletra_pneumatic == 'C') {
- opc4_A = num_pneumatic - pilots[i].compost[1];
- } else {
- opc4_A = 0;
- }
- } else {
- if (lletra_pneumatic == 'C' && pilots[i].compost[0] == 'I') {
- opc4_A = 1;
- } else {
- opc4_A = 2;
- }
- if (lletra_pneumatic == 'I' && (pilots[i].compost[0] == 'W' || pilots[i].compost[0] == 'I')) {
- opc4_A = 1;
- }
- if (lletra_pneumatic == 'W' && pilots[i].compost[0] == 'C') {
- opc4_A = 2;
- } else {
- opc4_A = 1;
- }
- }
- //Calcular parametre B
- opc4_B = num_parades - pilots[i].num_parades;
- //Calcular parametre C
- opc4_C = abs(num_pilots - (pilots[i].index + 1));
- //Calcular parametre D
- opc4_D = num_pilots;
- //Generar parametre R
- opc4_R = rand() % 8;
- //debug
- printf("\nDEBUG: (%s)A: %d, B: %d, C: %d, D: %d, R: %d", pilots[opc4_winner].nom, opc4_A, opc4_B, opc4_C, opc4_D, opc4_R);
- opc4_chance[i] = 100 - sqrt(abs(pow(opc4_A, 2)+pow(opc4_B, 2))) - (abs(cos(((opc4_C / opc4_D)*100*(2/3))+(1/3*opc4_R))) * 40);
- }
- //printejar els resultats
- printf("\nSimulant carrera ...");
- printf("\n\nResultats:\n");
- opc4_winner = 0;
- opc4_top = 0;
- for (i = 0; i < num_pilots; i++) {
- printf("\n%d. %s (%.2f)", i + 1, pilots[i].nom, opc4_chance[i]);
- if (opc4_chance[i] > opc4_top) {
- opc4_top = opc4_chance[i];
- opc4_winner = i;
- }
- }
- //Pixelart de la copa
- printf("\n\n");
- printf("\n ░░░░░░░▒▒▒▓▓▓ ");
- printf("\n ░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ");
- printf("\n ░ ░▒▒▒▒▒▒▒▒▒▒▓▓ ▒ ");
- printf("\n ░ ░▒▒▒▒▒▒▒▒▒▒▓▓ ▒ ");
- printf("\n ░ ░▒▒▒▒▒▒▒▒▒▒▓▓ ▒ ");
- printf("\n ░ ░▒▒▒▒▒▒▒▒▓▓ ▒ ");
- printf("\n ░░░░▒▒▒▒▒▓▓▓▓▒▒ ");
- printf("\n ░░░░▒▒▒▓▓ ");
- printf("\n ░░░ ");
- printf("\n ░▒▒ ");
- printf("\n ░░▒▒▓ ");
- printf("\n ░░▒▒▓▓▓▓▓ ");
- printf("\n ░░░▒▒▒▒▒▒ ");
- printf("\n");
- printf("\n Ehnorabona %s!\n", pilots[opc4_winner].nom);
- }
- }
- }
- //Si l'opcio triada es 5, el while que s'acaba de tancar no s'executara i passarem aqui.
- printf("\nGracies per utilitzar el programa!\nSort en la seguent carrera.\n\n");
- return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement