Pages : 1
#1 Le 14/10/2014, à 16:43
- quentino18
Passage en variable locale
Pour les cours de programmation en C , mon prof m'a demandé de faire un programme qui prend un vecteur en entrée ,et sort le vecteur normalisé.
Pas de problème.
( mis a part la taille non dynamique du vecteur ... mais c'est un détail )
Le problème , c'est que vu que j'avais fini , il m'a demandé de passer toutes mes variables globales toutes moches en haut de mon programme en variables locales ...
Sauf que dans celles-ci , j'ai notamment un vecteur ---> tableau , je vois pas comment passer par des variables locale sans le mettre dans toutes les fonctions ...
C'est ce qu'il faut faire ?
Et pour les autres petites variables ( genre calcul du nombre d'éléments dans un vecteur ) , je dois enlever la variable globale et recréer une autres petite fonction qui sort ce nombre d'éléments ?
Si vous avez d'autres suggestions au passage ( sur mon code ou autre ... )
Merci d'avance , Pour les très motivés ... : voici mon code :
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
float vect[100] = {0};
float vectnorm[100] = {0};
int nbmots = 0;
float nbnorme = 0;
void affiche(float* vect);
float norme(float* vect);
float* calc();
float* normalize(float* vect, float norme);
float* calc() /* calcul du vecteur */
{
char nombrecarac[15];
char carac = '0';
int i=0 ,j=0, *nbm = &nbmots;
printf("Donnez votre vecteur sous la forme : XXX XX XXXXX XX XX XXX ... \n");
while ((carac = getchar()) != '\n')
if (carac == ' ') /* si le caractère est un espace ( donc
entre 2 nombres) */
{
vect[*nbm] = (float) strtol( nombrecarac, NULL , 10 ); /* transformation
de la chaine de caractère en nombre dans "vect [ ènième nombre]" */
(*nbm)++; /* indentation du nombre de mot*/
for (j=0 ; j<i+1 ; j++) /* tableau de caractère remis a 0*/
{
nombrecarac[j] ='\0';
}
i=0;
}
else
{
nombrecarac[i] = carac; /* stockage du chiffre dans le tableau de caractère :
nombrecarac [ ènième chiffre du nombre] */
i++;
}
vect[*nbm] = (float) strtol( nombrecarac, NULL , 10 );
(*nbm)++;
return vect;
}
void affiche(float* vect) /*affichage du vecteur*/
{
int i=0, *nbm = &nbmots;
printf("Vecteur normalisé = ");
for (i = 0 ; i < *nbm ; i++)
printf("%.3f ", vect[i]);
printf("\n");
}
float norme(float* vect) /*calcul de la norme du vecteur */
{
int i=0, *nbm = &nbmots;
for (i = 0 ; i < *nbm ; i++)
nbnorme += (vect[i])*(vect[i]);
nbnorme = sqrt (nbnorme);
return nbnorme;
}
float* normalize(float* vect, float norme) /* normalisation du vecteur par la norme*/
{
int i=0, *nbm = &nbmots;
for (i = 0 ; i < *nbm ; i++)
vectnorm[i] = (vect[i] / norme);
return vectnorm;
}
int main()
{
calc(vect);
affiche(normalize (vect, norme(vect)));
return 0;
}
Hors ligne
#2 Le 14/10/2014, à 20:24
- pingouinux
Re : Passage en variable locale
Bonsoir,
Pour les variables, tu peux les déclarer dans main, et les passer en arguments aux fonctions.
Remarque 1 : Si tu mets plusieurs espaces entres les coordonnées quand tu lis le vecteur, il rajoute des coordonnées nulles
Remarque 2 :
Prototype de la fonction calc : float* calc();
Appel de cette fonction : calc(vect);
Il n'y pas d'erreur à la compilation, et j'en suis surpris.
Hors ligne
#3 Le 14/10/2014, à 21:26
- quentino18
Re : Passage en variable locale
[*]d'accord , je vais essayer ça [/*]
[*]Ahh oui , effectivement , et j'ai remarqué que je traite pas le vecteur nul aussi mais bon ... [/*]
[*]ah oui Oo , bizarre qu'il n'y ai meme pas de Warning [/*]
Merci beaucoup pour cette analyse , je passe en résolu dès que j'ai réussi
Hors ligne
Pages : 1