int AfficheMenu(char Date[],int compteurEvtDate) // affiche le menu principal et retourne le choix de l'utilisateur sous forme de nombre traité comme un caractère { char choix='0'; printf("%c",201); Ligne(205,1,78); printf("%c",187); LigneVideDoubleBarre(1); printf("%c AGENDA ELECTRONIQUE %c",186,186); LigneVideDoubleBarre(1); LigneRaccord(); LigneVideDoubleBarre(1); printf("%c %c",186,201); Ligne(205,1,43); printf("%c %c",187,186); printf("%c 1. Rechercher un evenement %c %c %c",186,186,186,186); switch (strlen(Date)) { case 19: printf("%c %c %s %c %c",186,186,Date,186,186); // Ce bloc sert à adapter l'affichage du menu principal break; // en fonction de la longueur de la chaîne Date pour ne case 20: printf("%c %c %s %c %c",186,186,Date,186,186); // pas décaler les bordures break; case 21: printf("%c %c %s %c %c",186,186,Date,186,186); break; default :printf("%c %c Date : indisponible %c %c",186,186,186,186); } printf("%c 2. Ajouter un evenement %c %c %c",186,186,186,186); printf("%c %c Nombre d'evenements aujourd'hui : %d %c %c",186,186,compteurEvtDate,186,186); printf("%c 3. Supprimer un evenement %c %c %c",186,186,186,186); printf("%c %c 5. Consulter les evenements du jour %c %c",186,186,186,186); printf("%c 4. Modifier un evenement %c %c %c",186,186,186,186); printf("%c %c",186,200); Ligne(205,1,43); printf("%c %c",188,186); LigneVideDoubleBarre(1); printf("%c",200); Ligne(205,1,78); printf("%c\n",188); do { printf("\n Votre choix ? (1,2,3,4,5) : "); choix=getch(); printf("%c",choix); }while (choix<'1' || choix>'5'); // contrôle d'acquisition return choix; }
void Map::ajouterLigne(Ligne ligne) { //Si la nouvelle ligne ne croise aucune autre lignes if (valideNouvelleLigne(ligne)) { _map.push_back(ligne); _hasChanged = true; return; } for (int i = 0; i < _map.size(); i++) { if (_map[i].traverse(ligne)) { //On efface l'ancienne ligne a la position i pour la remplacer plus tard auto tmp = _map[i]; std::swap(_map[i], _map[_map.size() - 1]); _map.resize(_map.size() - 1); //Si les deux lignes sont dans la même direction, on les fusionne if (ligne.isVertical() == tmp.isVertical()) { float x1, x2, y1, y2; x1 = std::min(ligne.getDebut().x, tmp.getDebut().x); y1 = std::min(ligne.getDebut().y, tmp.getDebut().y); x2 = std::max(ligne.getFin().x, tmp.getFin().x); y2 = std::max(ligne.getFin().y, tmp.getFin().y); //Il peut rester des intersections avec d'autre ligness, donc on se rapelle récursivement ajouterLigne(Ligne(x1, y1, x2, y2)); return; //Quitte la fonction } else { //On trouve l'intersection entre les lignes auto intersect = ligne.intersect(tmp); //Les deux lignes créées a partir de tmp n'ont aucune intersection puisque tmp n'en avait aucune en théorie if (tmp.getDebut() != intersect) _map.push_back(Ligne(tmp.getDebut(), intersect)); if (tmp.getFin() != intersect) _map.push_back(Ligne(intersect, tmp.getFin())); //Réutilise la fonction afin d'ajouter de façon sécuritaire les deux fragments de ligne if (ligne.getDebut() != intersect) ajouterLigne(Ligne(ligne.getDebut(), intersect)); if (ligne.getFin() != intersect) ajouterLigne(Ligne(intersect, ligne.getFin())); return; //Quitte la fonction } } } //Cette partie de la fonction ne devrais jamais etre atteinte assert(false); }
int main(int argc, char *argv[]) { unsigned long long e = 64889485484; unsigned long long b = e & (e-1); int i; int n = atoi(argv[1]); int **T = CreerTab(n); Afficher(n,T); int *C = Coords(T, n, 5); printf("ok"); int *Z = Ligne(T, n, C); int *D = Colonne(T, n, C); return 0; }
void Map::lireMap(std::istream & map) { if (!_map.empty()) _map.clear(); auto linePos = readNumFromStream<float, false>(map, 0, "(, )\n", '.'); if (linePos.size() % 4) throw std::invalid_argument("Le format de la map est invalide!"); for (int i = 0; i < linePos.size(); i += 4) { ajouterLigne(Ligne(linePos[i], linePos[i + 1], linePos[i + 2], linePos[i + 3])); } _bools = getBoolMap(); _mapOutline = getOutline(); }
/***************************************************** Fonction : gère le menu du programme Retour : *****************************************************/ void menu(Noeud* N,int Nb){ int i; int taille=200; char* in=NULL; in = (char*)malloc(sizeof(char)*taille); int n=Nb+1; char* out=NULL; out = (char*)malloc(sizeof(char)*taille); int ant[Nb][2]; float poids[Nb][3]; clock_t T1,T2; float temps; char c; int N2=Nb+1; Arbre* A=NULL; A = (Arbre*)malloc(sizeof(Arbre)); if(N->Ville_Suivante->v.indice !=1) { /*technique de sauvage pour ne pas re-générer le graphe*/ /*Génération du graphe avec voisins */ Remplirindice(N); T1=clock(); generer_graphe(N); T2=clock(); temps=(T2-T1)*1e-6; printf(" * Graphe genere en : %f s * ",temps); printf("\n\n * Le fichier contient bien %d villes * \n\n",Nb); } printf("\n"); printf("\n"); printf("\n"); printf("*****************************************************************************\n"); printf("*****************************************************************************\n"); printf(" Bonjour, bienvenue dans notre programme !\n"); printf("*****************************************************************************\n"); printf("*****************************************************************************\n"); while (i!=6){ printf("\n"); printf("\n"); printf("*****************************************************************************\n"); printf("Veuillez entrer l'entier (et non pas une lettre !) correspondant à votre choix\n"); printf("\n"); printf("-----------------------------------------------------------------------------\n"); printf(" 1- Afficher en détail les villes de votre fichier.csv \n"); printf("-----------------------------------------------------------------------------\n"); printf(" 2- Afficher les n villes les plus peuplées de votre fichier.csv \n"); printf("-----------------------------------------------------------------------------\n"); printf(" 3- Afficher les villes du graphe ainsi que tous leurs voisins\n"); printf("-----------------------------------------------------------------------------\n"); printf(" 4- Afficher le chemin le plus court entre 2 villes de votre choix\n"); printf("-----------------------------------------------------------------------------\n"); printf(" 5- Afficher l'arbre couvrant de N villes\n"); printf("-----------------------------------------------------------------------------\n"); printf(" 6- Sortir du programme\n"); printf("-----------------------------------------------------------------------------\n"); printf("\n***************************************************************************\n"); scanf("%d",&i); switch(i){ case 1: Afficher_Graphe_sans_voisin(N,Nb); break; case 2: while (n>Nb){ printf("\n **Tapez votre nombre n correspondant au nombre de villes de votre choix**\n\n"); scanf("%d",&n);} Generateur_HTML ("map.html", N, n); printf("\n**Le fichier map-output.html correspondant a ete genere (dans le dossier)**\n"); n=Nb+1; break; case 3: Afficher_Graphe(N,Nb); /*avec les voisins*/ break; case 4: printf("\n"); printf("*******************************************************************\n"); printf("Vous pouvez utiliser la completion pour retrouver les villes de votre fichier\n"); printf(" (en appuyant sur entree) !\n"); printf("*******************************************************************\n"); printf("\n"); scanf("%c",&c); printf("\n"); printf("**Entrez une ville de départ (Attention à la casse !):\n"); fgets(in,taille,stdin); printf("\n"); while (!Rechercher_Noeud(N,in)){ completion(in,N); printf("\n"); printf("**Entrez un nom de ville disponible dans la liste... (Attention à la casse !)**\n"); printf("ou utilisez la completion pour une nouvelle ville : \n\n"); printf("\n"); fgets(in,taille,stdin); printf("\n");} printf("**Entrez maintenant une ville d'arrivee (Attention à la casse !):\n"); printf("\n"); fgets(out,taille,stdin); printf("\n"); while (!Rechercher_Noeud(N,out)){ completion(out,N); printf("\n"); printf("**Entrez un nom de ville disponible dans la liste...(Attention à la casse !)**\n"); printf(" ou utilisez la completion pour une nouvelle ville : \n\n"); fgets(out,taille,stdin); printf("\n"); } T1=clock(); PCC (N,Nb,in,out,ant,poids); T2=clock(); temps=(T2-T1)*1e-6; printf(" * Djikstra en : %f * \n",temps); Generateur_HTML2 ("map.html",N,Nb, ant,indice(N,in), indice(N,out)); printf("\n**Le fichier map-output2.html correspondant a ete genere (dans le dossier)**\n"); break; case 5: while (N2>Nb){ printf("\n **Tapez votre nombre N correspondant au nombre de villes de votre choix**\n\n"); scanf("%d",&N2);} T1=clock(); A=RemplirArbre(A,N,N2); A=Ligne(A,N2); T2=clock(); temps=(T2-T1)*1e-6; printf(" * Arbre rempli en : %f * \n",temps); printf("\n**Arbre rempli!**\n\n"); Generateur_HTML3 ("map.html", N, N2,A); printf("\n**Le fichier map-output3.html correspondant a ete genere (dans le dossier)**\n"); N2=Nb+1; break; case 6: printf("\n** Au revoir! **\n\n"); break; default: menu(N,Nb); break; } } }
Grille grilleVide () { return Grille(GRILL_HEIGHT,Ligne(GRILL_WIDTH,0)); }
void AfficheListe(char critere[],int *n,int nb_evt,int mode)// Affiche la liste des événements correspondant au critère de recherche { int compteur=0,i=0; char LigneComp[150] ; char numero[10]; FILE* fichier = NULL ; system("cls"); if (strcmp(critere,"")==0) // Si le critère rentré est nul { Ligne(205,1,80); printf("\n Tous les evenements \n\n"); Ligne(205,1,80); } else if (mode==5 && nb_evt==1) // S'il y a un évènement aujourd'hui et qu'on veut les évènements du jour { Ligne(205,1,80); printf("\n %d evenement aujourd'hui \n\n",nb_evt); Ligne(205,1,80); } else if (mode==5 && nb_evt==0) // S'il n'y a pas d'évènement aujourd'hui et qu'on veut les évènements du jour { Ligne(205,1,80); printf("\n Aucun evenement aujourd'hui \n\n"); Ligne(205,1,80); } else if (mode==5 && nb_evt!=1) // S'il y a plusieurs évènements aujourd'hui et qu'on veut les évènements du jour { Ligne(205,1,80); printf("\n %d evenements aujourd'hui \n\n",nb_evt); Ligne(205,1,80); } else { Ligne(205,1,80); printf("\n Recherche : %s\n\n",critere); // Affiche le critère de recherche au dessus des résultats Ligne(205,1,80); } fichier=fopen("BDD.txt","r"); if (fichier != NULL) // Dans cette fonction, nous allons lister et numéroter les différents évènements qui correspondent { // au critère de recherche. rewind(fichier); // on revient au début du fichier while(fgetc(fichier)!=EOF) // tant que l'on est pas à la fin du fichier { fseek(fichier,-1,SEEK_CUR); // on se place au début de la ligne fgets(LigneComp,150,fichier); if (strstr(LigneComp,critere)!=NULL) { compteur ++; printf("\n\n %d. ",compteur); i=0; while(LigneComp[i]!='|') { printf("%c",LigneComp[i]); i++; } } } fclose(fichier); if (fgetc(fichier)==EOF && compteur == 0) // S'il n'y a aucun résultat pour la recherche. { printf("\n\n\n\t\tAucun resultat pour votre recherche\n\n\n"); } else { printf("\n\n\n Retourner au menu ? (M) / Continuer ? (C)"); // On a le choix de retourner au menu sans avoir choisi switch (mode) // un évènement, ou de continuer pour pouvoir consulter un évènement { case 3: // Si l'on veut supprimer un élément printf("\n\n (Vous ne pourrez plus revenir en arriere avant d'avoir supprime un evenement)"); break; case 4: // Si l'on veut modifier un évènement printf("\n\n (Vous ne pourrez plus revenir en arriere avant d'avoir modifie un evenement)"); break; } *n=fgetc(stdin); // Ce pointeur retourne le choix de l'utilisateur while (*n!= 'M' && *n !='c' && *n!= 'm' && *n !='C') { printf("\nIncorrect, veuillez reessayer \n"); // contrôle d'acquisition vide_buffer(); *n=fgetc(stdin); } if (*n=='c' || *n == 'C') { vide_buffer(); switch (mode) { case 1: printf("\n\nQuel evenement souhaitez-vous voir en detail ? (entrez le n%c)\n",167); break; case 3: printf("\n\nQuel evenement souhaitez-vous supprimer ? (entrez le n%c)\n",167); break; case 4: printf("\n\nQuel evenement souhaitez-vous modifier ? (entrez le n%c)\n",167); break; case 5: printf("\n\nQuel evenement souhaitez-vous voir en detail ? (entrez le n%c)\n",167); break; } do { fgets(numero,9,stdin); // Acquisition du choix de l'utilsateur while (IsNumeric(numero)==0) // Tant que la chaine de caractères entrée n'est pas un nombre { printf("\nIncorrect, veuillez reessayer"); fgets(numero,9,stdin); } *n=(int)strtol(numero,NULL,10); // Ce pointeur retourne le choix de l'utilisateur (numéro de l'évènement) }while(*n<1 || *n>compteur); } } } else { printf("Ouverture echouee"); // Si le fichier BDD.txt n'existe pas } }