LES TABLEAUX UNIDIMENSIONNELS.

Signaler
Messages postés
12
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
3 février 2003
-
Messages postés
1
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
19 janvier 2005
-
Voilà tout d'abord bonjour à tous, je viens de m'inscrire sur ce site et c'est ma première apparition ( mais pas la dernère).

En fait j'ai un problème avec le langage C, mon professeur d'IUT nous a demander de créer un tableau, or nous n'avons jamais eu de cours sur les tableaux, bref, c'est assez difficile de faire quelque chose que nous ne connaissons pas et c'est pourquoi j'aimerais un petit peu d'aide de votre part.

Voici le Tp que mon prof m'a donné, j'aimerais qu'on me donne de l'aide afin que je puisse faire ce TP, car je n'y comprends vraiment pas grand chose, je suis donc tout à votre écoute pour toutes informations ( en langage C ca serai sympa) concernant ce TP.

MERCI d'AVANCE

Cahier des charges du TP

Le but de ce TP est de remplir un tableau d'entiers ( de différentes façons), d'afficher différents paramètres issus du tableau, de rechercher unevaleur ds le tableau trié ds l'ordre croissant.
Le tableau aura une taille de 10.
Les différentes étapes ci-dessous se déroulent de façon séquentielle.

a/ Le remplissage.

L'utilisateur dispose de trois options pr remplir ce tableau :

1/ Saisir 10 valeurs.

2/Saisir une valeur max. , le prog remplit alors automatiquement le tableau avec des valeurs aléatoires inf ou égales à la valeur max. saisie. Il peut y avoir des doublons.

3/Remplir automatiquement le tableau avec tous les entiers compris entre 1 et 10 rangés ds un ordre aléatoire . Il ne peut donc pas y avoir de doublons.

Après le remplissage, le tableau est affiché.

b/Affichage de différentes paramètres.

On affichera la somme des éléments, le min, le max, ainsi que la racine de la sommee des carrés des composantes ( la norme d'un vecteur, en fait).

c/ Recherche d'une valeur.

L'utilisateur saisit une valeur entière et le programme lui dit si elle appartient au tableau et si oui, à quel indice elle se trouve.
En cas de doublons, elle donne tous les indices.

d/Tri.
Ensuite, le tableu est trié ds l'ordre croissant et affiché.

Amicalement...

SniPi

:big)

12 réponses

Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
Salut, bon, comme toi je suis étudiant en IUT informatique, j'ai pas encore vu les tableaux en C++ , ce sera en deuxièe année, nous on utilise la STL, c beaucoup mieux. Mais pour le fun je me suis penché sur ce petit prog.
Voici ce que j'ai tapé.

#include
#include <stdio.h>
#include <stdlib.h>

int Somme(int Tab[]);
int Min(int Tab[]);
int Max(int Tab[]);
double Racine(int Tab[]);
void Affiche(int Tab[]);
void Trier(int Tab[]);

int main()
{
int TableauDesResultats[10];
unsigned int key;
cout << "TP sur les tableaux" << endl;
cout << "a -> Saisir 10 valeurs" << endl;
cout << "b -> Saisir une valeur max" << endl;
cout << "c -> Remplir automatiquement le tableau" << endl;
cout << "q -> Quitter" << endl;
cout << "Entrez un choix puis appuyez sur entree" << endl;
while((key=getchar())!='q')
switch(key)
{
case 'a':
for(int i=0; i<10; cin>>TableauDesResultats[i], ++i){}
cout << endl << "Voici les éléments du tableau";
Affiche(TableauDesResultats);
cout << "La Valeur Min du tableau est " << Min(TableauDesResultats) << endl;
cout << "La valeur Max du tableau est " << Max(TableauDesResultats) << endl;
cout << "La racine de la sommee des carrés des composantes est " << Racine(TableauDesResultats) << endl;
Trier(TableauDesResultats);
cout << "Voici le tableau trié" << endl;
Affiche(TableauDesResultats);
cout << "Appuyez sur \'q\' pour quitter"<< endl;
break;
case 'b':
int max;
cin>>max;
for(int i=0;i<10;TableauDesResultats[i]=random(max), ++i){}
cout << endl << "Voici les éléments du tableau";
Affiche(TableauDesResultats);
cout << "La Valeur Min du tableau est " << Min(TableauDesResultats) << endl;
cout << "La valeur Max du tableau est " << Max(TableauDesResultats) << endl;
cout << "La racine de la sommee des carrés des composantes est " << Racine(TableauDesResultats) << endl;
Trier(TableauDesResultats);
cout << "Voici le tableau trié" << endl;
Affiche(TableauDesResultats);
cout << "Appuyez sur \'q\' pour quitter"<< endl;
break;
case 'c':
for(int i=0; i<10;TableauDesResultats[i]=10, i++)
{}
int j;
for(int i=0; i<10;i++)
{
do
{
j=random(10);
}while(TableauDesResultats[j]!=10);
TableauDesResultats[j]=i;
}
cout << endl << "Voici les éléments du tableau";
Affiche(TableauDesResultats);
cout << "La Valeur Min du tableau est " << Min(TableauDesResultats) << endl;
cout << "La valeur Max du tableau est " << Max(TableauDesResultats) << endl;
cout << "La racine de la sommee des carrés des composantes est " << Racine(TableauDesResultats) << endl;
Trier(TableauDesResultats);
cout << "Voici le tableau trié" << endl;
Affiche(TableauDesResultats);
cout << "Appuyez sur \'q\' pour quitter"<< endl;
break;
}
return 0;
}

void Affiche(int Tab[])
{
for(int i=0;i<10;++i){cout << Tab[i] <<endl;}
}

int Somme(int Tab[])
{
int sum=0;
for(int i=0; i<10;sum+=Tab[i], ++i){}
return sum;
}

int Min(int Tab[])
{
int min=INT_MAX;
for(int i=0; i<10; ++i)
{
if(Tab[i]<min)
min = Tab[i];
}
return min;
}

int Max(int Tab[])
{
int max=INT_MIN;
for(int i=0; i<10; ++i)
{
if(Tab[i]>max)
max = Tab[i];
}
return max;
}

double Racine(int Tab[])
{
int Som;
for(int i=0; i<10;Som+=Tab[i]*Tab[i], ++i)
{}
return sqrt(Som);
}

void Trier(int Tab[])
{
int temp;
for(int i=0; i<10; i++)
for(int j=0; j<10; j++)
if(Tab[i]<Tab[j])
{
temp = Tab[i];
Tab[i] = Tab[j];
Tab[j] = temp;
}
}

J'ai testé le code et ca marche normalement. La méthode de trie que j'ai utilisé est le trie itératif vu qu'il y a pas beaucoup de valeurs a trier. Au niveau clarté du code je me suis pas embetter, on pe alleger un pe ca au niveau des cout. Voila, j'espère que cela te convient, ne soit pas trop critique, j'ai écris ce code en un peu plus de 30 min. Au faut, t'es a quel IUT, moi j'suis de La Rochelle.
Alé bonne chance pour ton TP.
Bouba
Messages postés
12
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
3 février 2003

Amicalement...

SniPi

:big)
Messages postés
12
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
3 février 2003

Je ne vais pas être critiques, mais j'avoue ne pas trop comprendre ce que tu as fait car je travail en C, donc je ne comprends pas tout les case, switch..pourrai tu me dire par quoi je dois les remplacer afin que je puisse m'y retrouver.

Amicalement

snipi

Merci
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
En fait switch n'est pas réservé au C++, d'ailleur c'est le C qui est originaire de cette instruction conditionelle.
En résumé si tu fé

unsigned int key;
switch(key)
{
case 'a':
break;
case 'b':
break;
case 'c':
break;
}

Ca équivaut a
unsigned int key;
if(key=='a)
{
}
if(key=='b')
{
}
if(key=='c')
{
}

Voila, tu devrais piger avec ca. Au fait, j'ai oublié de faire la fonction qui recherche une valeur et donne l'indice de la position a laquelle elle se trouve, si tu as du mal à la rédiger répond a mon msg et demande moi.
Alé, a+.
Bonne Prog.
Bouba.
Messages postés
12
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
3 février 2003

Alors je n'y suis pas du tout..jsuis carement perdu ds cke tu as fait, car moi je viens de commencer ya pas lgtps le C, et donc je travail encor eavec les printf, scanf, getch(), et les boucles...

J'ai essayer de changer quelques truks histoire de m'y retrouver mais ca me sors une liste assez enorme d'erreurs.

Si tu pmouvais m'aider.

PS: je suis à l'IUT de lieusaint ds le 77

Amicalement...

SniPi

:big)
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
Bon, voici le programme modifié, j'espère que c'est mieux.

#include
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int Somme(int Tab[]);
int Min(int Tab[]);
int Max(int Tab[]);
double Racine(int Tab[]);
void Affiche(int Tab[]);
void Trier(int Tab[]);

int main()
{
int TableauDesResultats[10];
unsigned int key;
printf("TP sur les tableaux\n");
printf("a -> Saisir 10 valeurs\n");
printf("b -> Saisir une valeur max\n");
printf("c -> Remplir automatiquement le tableau\n");
printf("q -> Quitter\n");
printf("Entrez un choix puis appuyez sur entree\n");
while((key=getch())!='q')
switch(key)
{
case 'a':
printf("\nEntrez 10 valeurs\n");
for(int i=0; i<10;scanf("%d",&TableauDesResultats[i]), ++i){}
printf("\nVoici les éléments du tableau\n");
Affiche(TableauDesResultats);
printf("La Valeur Min du tableau est %d",Min(TableauDesResultats));
printf("\nLa valeur Max du tableau est %d",Max(TableauDesResultats));
printf("\nLa racine de la sommee des carrés des composantes est %d",Racine(TableauDesResultats));
Trier(TableauDesResultats);
printf("\nVoici le tableau trié\n");
Affiche(TableauDesResultats);
printf("Appuyez sur \'q\' pour quitter\n");
break;
case 'b':
int max;
printf("\nEntrez la valeur max\n");
scanf("%d",&max);
for(int i=0;i<10;TableauDesResultats[i]=random(max), ++i){}
printf("\nVoici les éléments du tableau\n");
Affiche(TableauDesResultats);
printf("La Valeur Min du tableau est %d",Min(TableauDesResultats));
printf("\nLa valeur Max du tableau est %d",Max(TableauDesResultats));
printf("\nLa racine de la sommee des carrés des composantes est %d",Racine(TableauDesResultats));
Trier(TableauDesResultats);
printf("\nVoici le tableau trié\n");
Affiche(TableauDesResultats);
printf("Appuyez sur \'q\' pour quitter\n");
break;
case 'c':
for(int i=0; i<10;TableauDesResultats[i]=10, i++)
{}
int j;
for(int i=0; i<10;i++)
{
do
{
j=random(10);
}while(TableauDesResultats[j]!=10);
TableauDesResultats[j]=i;
}
printf("\nVoici les éléments du tableau\n");
Affiche(TableauDesResultats);
printf("La Valeur Min du tableau est %d",Min(TableauDesResultats));
printf("\nLa valeur Max du tableau est %d",Max(TableauDesResultats));
printf("\nLa racine de la sommee des carrés des composantes est %d",Racine(TableauDesResultats));
Trier(TableauDesResultats);
printf("\nVoici le tableau trié\n");
Affiche(TableauDesResultats);
printf("Appuyez sur \'q\' pour quitter\n");
break;
}
return 0;
}

void Affiche(int Tab[])
{
for(int i=0;i<10;++i){printf("%d\n",Tab[i]);}
}

int Somme(int Tab[])
{
int sum=0;
for(int i=0; i<10;sum+=Tab[i], ++i){}
return sum;
}

int Min(int Tab[])
{
int min=INT_MAX;
for(int i=0; i<10; ++i)
{
if(Tab[i]<min)
min = Tab[i];
}
return min;
}

int Max(int Tab[])
{
int max=INT_MIN;
for(int i=0; i<10; ++i)
{
if(Tab[i]>max)
max = Tab[i];
}
return max;
}

double Racine(int Tab[])
{
int Som;
for(int i=0; i<10;Som+=Tab[i]*Tab[i], ++i)
{}
return sqrt(Som);
}

void Trier(int Tab[])
{
int temp;
for(int i=0; i<10; i++)
for(int j=0; j<10; j++)
if(Tab[i]<Tab[j])
{
temp = Tab[i];
Tab[i] = Tab[j];
Tab[j] = temp;
}
}

Si tu as d'autres questions ou si tu ne comprends pas réponds a mon msg.
Alé a+.
Bouba
Messages postés
12
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
3 février 2003

En fait sur ce fichie il y a 4 erreurs que je n'arrive pas à corriger.

C'est a dire, qu'il me mets que INT_MAX et INT_MIN sont pas définis et pour case'b' ry case'c' il me dit : cases bypasses initialisation of a local variable...

Amicalement...

SniPi

:big)
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
Bon, pour les INT_MAX et INT_MIN c'est que tu as du oublier le header
#include
Si ca marche pas fais ca au début de ton prog
#define INT_MAX 32768
#define INT_MIN -32768

La syntaxe du switch c'est
swicth(key)
{
case 'b' :
........
break;
............
...........
.........
}

Sinon, dis moi quelle compilateur tu utilises exactement.
Messages postés
12
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
3 février 2003

j'utilise borland c++ 5.01

merci encore

Amicalement...

SniPi

:big)
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
En bien moi j'utilise Borland C++ 5.5 alors ca devrait marcher!!!!!
Alé a+.
Encore une fois si tu as d'autres questions y'a pas de blem mais ce sera pour demain maintenant.
Bonne Prog.
Bouba
Messages postés
12
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
3 février 2003

Amicalement...

SniPi

:big)
Messages postés
1
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
19 janvier 2005

Salut,
j'ai juste une petite question qui n'a rien avoir avec les tableaux
pourquoi affectes-tu?
INT_MAX à int min
INT_MIN à int max
Merci