#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include "entete.h"
#define NORD 0.0
#define SUD 1.0
#define EST 2.0
#define OUEST 3.0
/*********************************************************************/
// Ce programme permet de convertir une coordonnée GPS
// de la forme degré décimal en coordonnée DMS -> degré, minute, seconde
/*********************************************************************/
float Gps[5][4] = {
{45.3212,NORD,73.7936,OUEST},
{0.0552,SUD,124.1115,OUEST},
{25.3651,NORD,40.7537,EST},
{36.4723,SUD,65.8853,EST},
{20.6545,SUD,95.4225,EST},
};
char direction[4][6] = {{"NORD"},{"SUD"},{"EST"},{"OUEST"}};
char titre[2][10] = {{"Latitude"},{"Longitude"}};
int main(){
float *pointeurCoordonnee = NULL;
char *pointeurDirection =NULL;
char *pointeurTitre =NULL;
char c = '0';
pointeurCoordonnee =(float *)Gps; //pointeurCoordonnee contient l'adresse de GPS
pointeurDirection = (char * )direction; //pointeurDirection contient L'adresseDirection
pointeurTitre = (char *)titre; //pointeurTitre contient l'adresse de titre
int tailleDutableauComplet = sizeof(Gps); //contient la taille du tableau complet
int tailleDuLigneDuTableau = sizeof(Gps[0]); //contient la taille d'une collonne
int NombrederangerDutableau = tailleDutableauComplet / tailleDuLigneDuTableau; //contient le nombre de ligne du tableau
do{
printf("\nEntrez un chiffre entre 1 et 5 (0 pour quitter) : ");
c = getch();
printf("%c",c);
if (c =='1'){
int numeroLigne = 0;
convertirDMS(pointeurCoordonnee,tailleDuLigneDuTableau,numeroLigne,pointeurDirection,pointeurTitre);
}else if( c =='2'){
int numeroLigne = 1;
convertirDMS(pointeurCoordonnee,tailleDuLigneDuTableau,numeroLigne,pointeurDirection,pointeurTitre);
}else if (c =='3'){
int numeroLigne = 2;
convertirDMS(pointeurCoordonnee,tailleDuLigneDuTableau,numeroLigne,pointeurDirection,pointeurTitre);
}else if (c =='4'){
int numeroLigne = 3;
convertirDMS(pointeurCoordonnee,tailleDuLigneDuTableau,numeroLigne,pointeurDirection,pointeurTitre);
}else if (c == '5'){
int numeroLigne = 4;
convertirDMS(pointeurCoordonnee,tailleDuLigneDuTableau,numeroLigne,pointeurDirection,pointeurTitre);
}else if(c =='0'){
printf("\n\n");
printf("Au revoir");
}else {
system("CLS");
}
}while(c!='0');
printf("\n\n");
printf("Pesez une touche pour continuer : ");
getch();
exit(0);
return 0;
}
Quand l'utilisateur choisit 1 par exemple , je veux selectionner seulement la collonne du tableau .Je sais qu'il y a un syntaxe , mais souvent en c , on le trouve pas facilement.Des idée??
Merc!!
- Edité par JonathanOlivier2 17 février 2022 à 18:00:17
Ce programme ne peut pas fonctionner. ptrcoo est de type float *, alors que Gps est type tableau de pointeurs sur tableau de floats. C'est tout à fait différent. Alors, oui, tu n'as pas de warning à la compilation, mais ça c'est parce que tu castes Gps en float *. Par contre, écrire ptrcoo=Gps[0], ça c'est correct. Idem pour les deux autres pointeurs évidemment.
Question: quand tu écris en commentaire "contient la taille du tableau complet", de quelle taille parles-tu ? La taille du tableau en octects ou le nombre d'élements ? Car là, tu as la taille du tableau en octets.
Edit: ortho
- Edité par edgarjacobs 17 février 2022 à 18:19:14
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Ce programme ne peut pas fonctionner. ptrcoo est de type float *, alors que Gps est type tableau de pointeurs sur tableau de floats. C'est tout à fait différent. Alors, oui, tu n'as pas de warning à la compilation, mais ça c'est parce que tu castes Gps en float *. Par contre, écrire ptrcoo=Gps[0], ça c'est correct. Idem pour les deux autres pointeurs évidemment.
Question: quand tu écris en commentaire "contient la taille du tableau complet", de quelle taille parles-tu ? La taille du tableau en octects ou le nombre d'élements ? Car là, tu as la taille du tableau en octets.
Edit: ortho
- Edité par edgarjacobs il y a environ 1 heure
Mais GPs est pas un tableau en deux dimension , moi je voulais faire si l'utilisateur tape 1 , on selectionne la premiere colonne du tableau de GPS , Je sais qu'on peut faire ca je pense
Mais bien sur que si, il a 5 lignes et 4 colonnes:
float Gps[5][4]
Si tu expliquais ce que tu veux que ton programme fasse ? *
Tant que j'y suis, lle do....while peut se résumer à
do {
printf("\nEntrez un chiffre entre 1 et 5 (0 pour quitter) : ");
c = getch();
printf("%c",c);
if(c=='0')
printf("\n\nAu revoir");
else
if(c<'6')
convertirDMS(pointeurCoordonnee,tailleDuLigneDuTableau,c-'1',pointeurDirection,pointeurTitre);
else
system("cls");
} while(c!='0');
* Edit: tu voudrais que l'utilisateur entre la ligne de la coordonnées qui doit être convertie, c'est bien ça ?
- Edité par edgarjacobs 17 février 2022 à 19:26:40
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Mais bien sur que si, il a 5 lignes et 4 colonnes:
float Gps[5][4]
Si tu expliquais ce que tu veux que ton programme fasse ? *
Tant que j'y suis, lle do....while peut se résumer à
do {
printf("\nEntrez un chiffre entre 1 et 5 (0 pour quitter) : ");
c = getch();
printf("%c",c);
if(c=='0')
printf("\n\nAu revoir");
else
if(c<'6')
convertirDMS(pointeurCoordonnee,tailleDuLigneDuTableau,c-'1',pointeurDirection,pointeurTitre);
else
system("cls");
} while(c!='0');
* Edit: tu voudrais que l'utilisateur entre la ligne de la coordonnées qui doit être convertie, c'est bien ça ?
- Edité par edgarjacobs il y a moins de 30s
Wow , ton programme fait moins de ligne que le mien et fait la meme chose , j'ai encore pas mal a assimiler pour etre bon en c ,
Il faut écrire un programme qui fera la traduction du contenu d’un des cinq tableaux du tableau Gps contenant les coordonnées de longitude Nord ou Sud et de la latitude Est ou Ouest en une traduction ayant l’aspect montré dans la section « aspect du résultat de l’exécution ». Les coordonnées sont données en degrés et vous devez donner le résultat sous forme degrés, minutes, secondes
Oui , je me suis tromper , c'est bien un tableau en deux dimension , ce qui ma confus c'est quand tu a ecrit : « Gps est type tableau de pointeurs sur tableau de floats»
- Edité par JonathanOlivier2 17 février 2022 à 19:37:23
void convertirDMS (float pointeur[5][4],int tailleDuLigneDeTableau,int numeroLigne,char *pointeurDirection,char *pointeurTitre){
float tableauConverti[4]={0};
int degre[1] = {0};
int minute[1] = {0};
float seconde[1] = {0};
int k=0;
int compteur=0;
for ( k =0 ;k < tailleDuLigneDeTableau;k++){
tableauConverti[k] = pointeur[numeroLigne][k]; //rajoute les elements du tableau dimension dans un tableau a 1 dimension
}
float valeurpremiereRanger = 0;
float valeurDeuxiemeRanger = 0;
valeurpremiereRanger = tableauConverti[0];
valeurDeuxiemeRanger = tableauConverti[2];
degre[0] = fabs(valeurpremiereRanger); //Mets en valeur absolue
degre[1] = fabs(valeurDeuxiemeRanger); //Mets en valeur absolue
minute[0] = ((valeurpremiereRanger-degre[0])* MINUTE);
seconde[0] =((valeurpremiereRanger-degre[0])-(float)(minute[0])/60)*SECONDE;
minute[1] = (valeurDeuxiemeRanger-degre[1])* MINUTE;
seconde[1] = ((valeurDeuxiemeRanger-degre[1])-(float)(minute[1])/60)*SECONDE;
Bonjour , j'ai un probleme que j'arrive pas a identifier dans ma fonction conversion , lorsque le programme arrive a l'instruction suivante et l'execute : minute[1] = (valeurDeuxiemeRanger-degre[1])* MINUTE; , Mon tableau degre[0] est rendu a 47 et non a 45 degre , car je met en absolu le nombre 45 dans le tableau gps dans le main voir en haut de la page.J'ai ce probleme ou l'ordinateur incremente pour sans raison le nombre 45 pour 47.Avez vous des idées? Merci
- Edité par JonathanOlivier2 22 février 2022 à 0:29:40
Quelle grandeur penses-tu réserver avec cet énoncé? int degre[1] = {0}; et ensuite ... degre[0] = fabs(valeurpremiereRanger); //Mets en valeur absolue degre[1] = fabs(valeurDeuxiemeRanger); //Mets en valeur absolue tu écris sur autre chose.
degre[1] a peut-être été détruit par minute[0] minute[1] = (valeurDeuxiemeRanger-degre[1])* MINUTE;
Je ne veux pas présumer de l'endroit relatif où se trouvent en mémoire les tableaux degre, minute, seconde. Si tu veux réserver 2 positions (nommées 0 et 1) il faut faire ...[2]
- Edité par PierrotLeFou 22 février 2022 à 5:14:57
Le Tout est souvent plus grand que la somme de ses parties.
Quelle grandeur penses-tu réserver avec cet énoncé? int degre[1] = {0}; et ensuite ... degre[0] = fabs(valeurpremiereRanger); //Mets en valeur absolue degre[1] = fabs(valeurDeuxiemeRanger); //Mets en valeur absolue tu écris sur autre chose.
degre[1] a peut-être été détruit par minute[0] minute[1] = (valeurDeuxiemeRanger-degre[1])* MINUTE;
Je ne veux pas présumer de l'endroit relatif où se trouvent en mémoire les tableaux degre, minute, seconde. Si tu veux réserver 2 positions (nommées 0 et 1) il faut faire ...[2]
- Edité par PierrotLeFou il y a environ 8 heures
Oh ok merci la maintenant , ca marche ,je pensais que degre[1] veut dire deux espace memoire , l'adresse 0 et l'adresse 1 (exemple) , donc deux espace pour stocker deux nombre. Je pensais pas que l'ordinateur allait piétiner sur une espace memoire d'une autre variable
Salut , j'ai reussi a faire la conversion , mais je me suis casser la tete un peu trop, c'est pour ca je vais reviser et essayer de le simplifier tout en ayant la meme fonctionalité du programme demandé!Oui ,c'est sur qu'il y a plein de solution , je vais regarder ceux que je peux faire! J'avais fait ca de passer la ligne de mon tableau, mais javais tout le temps une erreur d'incompatibilité , donc j'ai envoyer GPS et mis conversionDMS(float pointeur[][4], et la ca a marcher
- Edité par JonathanOlivier2 22 février 2022 à 21:28:02
Remarque quand même que pour la conversion degrés décimaux → degrés minutes secondes, on se moque que la coordonnées soit N, S, E, ou O. Ça, ça concerne uniquement l'affichage.
Mais oui, ta fontion est très très (trop) compliquée.
De plus, la présentation de ton code (indentation) ne pousse pas à le lire.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Passer en parametre une collonne en c
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent