Programme

Fermé
damien7258 - 26 mars 2008 à 12:38
argentine Messages postés 10 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 3 avril 2008 - 3 avril 2008 à 20:09
Bonjour,je voudrait un peut d'aide pour faire un programme, j'ai pensé à une solution mais je ne pense pas qu'elle soit compléte si vous avez des idées merci d'avance.

Voici le programme qu'il faut faire :
écrire une fonction qui à partir de deux tableaux préalablement triés,permet de former un tableau résultat trié contenant les éléments des deux tableaux.
Les trois tableaux (2remplis,un vide)sont passés en paramétre à la fonction.
Cette fonction devra retourner le nombre d'éléments du tableau résulatat.

voici la solution que je propose je ne suis pas sur d'avoir trés bien compris le sujet.
ma fonction:

long Tableau (tableau1[],tableau2[],tableauresulat[])
{
int i=0;
for(i=0;i<tableau1[i] || i<tableau2[i];i++)
{
if (i<tableau1[i])
tableauresultat[i]=tableau1[i];
else if (i<tableau2[i])
tableauresultat[i]=tableau2[i];
}
return tableauresultat[];
}

Mon programme:
long Tableau (tableau1[],tableau2[],tableauresulat[]);

long tableau1[4]={1,12,45};
long tableau2[5]={4,5,16,24};
long tableauresultat[100];

tableauresulat=Tableau (tableau1[],tableau2[],tableauresulat[])
printf("le resulatat est %ld",tableauresultat[]);
}


Je me demande si l'énoncer ne demande pas de rentré les valeur dans un tableau?
Merci d'avance.

20 réponses

SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
26 mars 2008 à 13:50
oui, l'énoncé demande de rentrer les valeurs dans un tableau.
le gros problème ici sera donc le nombre d'éléments de ton tableau résultat :
si tu as un tableau de 5 éléments et un tableau de 3 éléments, quelle sera la taille du tableau de sortie?
peut-il y avoir des doublons dans le tableau de sortie?
si le tableau A est [1;2;4;5] et le tableau B est [4;5;8;9]
le tableau sortie est-il [1;2;4;5;8;9] ou [1;2;4;4;5;5;8;9]
avant de commencer à écrire ton programme, il faut que tout ça soit bien clair dans ta tête, sinon c'est tu vas te planter à 95 chances sur 100.

ensuite, i et tableau1[i]ne sont pas corrélés.
ta boucle for(i=0;i<tableau1[i] || i<tableau2[i];i++) me paraît très douteuse.
si tu as 2 tableaux commençant chacun au dessus de 5, qu'est-ce qu'il se passe?...
0
Quel est le programme qui fait le contrôl à un pc à distance?
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
26 mars 2008 à 14:16
si tu étais poli, tu respecterai les posts des autres.
et si tu veux une réponse, sois poli.
0
après réflexion c'est vrai que ma boucle for ne peut pas fonctionner car aussi non le tableau de sortie risque d'avoir beaucoup de 0.
Par contre il y avait un exemple et les doublons ne sont pas accepter donc si je reprend ton exemple le tableau sortie est [1;2;4;5;8;9].
je crois que c'est un petit peu plus clair à ce niveau la en revanche je ne vois pas trop comment procédé pour faire rentré dans mon tableau de sortie seulement quelques valeurs rentré en paramètre je vais y réfléchir encore si vous avez quelques tuyaux à me donner bien merci d'avance.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Voici mon début de programme:

int main(void)
{
long taille1,taille2;
long tableau1[taille1];
long tableau2[taille2];

printf("entrez la taille du tableau1 puis celle du tableau 2:\n");
scanf("%ld%ld",&taille1,&taille2);

Mais c'est maintenant que je ne vois pas comment associer des valeurs rentrées en paramètre a mon tableau.
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
27 mars 2008 à 09:56
la taille de ton tableau de sortie sera au plus égal à la somme des tailles de tes 2 tableaux d'entrée...
tu peux prévoir un tableau trop grand et tu n'initialise que les éléments dont tu as besoin, en retournant le nombre d'éléments initialisés (c'est d'ailleurs ce qu'on te demande...)
pour entrer les valeurs de tes tableaux, deux boucles for suffisent, une pour chaque tableau

int temp;
for(int i=0;i<taille_tab1;i++)
{
printf("entrez l'element %d tu tableau 1\n");
scanf("%d",&temp);
tab[i]=temp;
}

idem pour le tableau 2
0
La j'ai fait seulement pour le tableau 1 mais quant je rentre les valeur mon programme plante
voici mon programme et merci déja pour ces conseils j'ai bien avancé.


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

int main(int argc, char *argv[])
{
int taille_tab1=0,taille_tab2;
long valeur=0,i=0;
long* tableau1=NULL;
long* tableau2=NULL;

printf("entrez la taille du tableau 1 puis celle du tableau2\n");
scanf("%ld",&taille_tab1);

if (taille_tab1 > 0)
{
tableau1 = malloc(taille_tab1 * sizeof(long));
if (tableau1 == NULL)
{
exit(0);
}


for(i=0;i<taille_tab1;i++);
{
printf("entrez l'element %d tu tableau 1\n");
scanf("%d",&valeur);
tableau1[i]=valeur;
}


printf("\n\nVotre tableau 1 a les valeurs suivantes :\n");

for (i = 0 ; i < taille_tab1 ; i++)
{
printf("%ld\n", tableau1[i]);
}
free(tableau1);
}
system("PAUSE");
return 0;
}
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
27 mars 2008 à 13:00
oui, c'est normal : tu ne déclare pas des tableaux mais des pointeurs
long* tableau1=NULL;
long* tableau2=NULL;
par conséquent, la mémoire allouée est prévue pour recevoir une adresse et rien de plus, alors que quand tu déclares un tableau, il alloue une zone mémoire pour la tête de ton tableau et toutes les zones mémoires pour les éléments du tableau

donc forcément, dans ton cas, quand tu veux initialiser les valeurs tableau1[i], tu vas initialiser des zones mémoires qui ne sont pas allouées, et ça plante.
il te faut donc déclarer des tableaux.
en supposant que tu aies des tableaux de 20 éléments, tu auras
long tableau1[20];
long tableau2[20];
long tableau3[40];
etc...
comme ça ça devrait beaucoup mieux marcher.

la taille de tes tableaux doit être fixée une fois pour toute car la mémoire va être allouée au démarrage de ton programme, mais tu n'es pas obligé d'utiliser toute la taille allouée.
par exemple, si tu as des tableaux d'au plus 20 éléments, tu déclares des tableaux de 20 éléments. après, rien ne t'interdit de n'utiliser que les 5 premiers. c'est à ça que te servent tes variables taille
0
Bien merci bien j'espert arriver a faire ce programme en tous cas merci pour les infos.
0
GRIETA Messages postés 6 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 28 mars 2008 1
27 mars 2008 à 23:59
JE VOULAIS SAVOIR 0 QUEL EST LE BUT de ce programmer
ecrire une fonction ???
HARMONIQUE estc e possible ??
0
tu peu faire ce pro par pour ou repete jusgu'a comm ca je croi
0
GRIETA Messages postés 6 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 28 mars 2008 1
28 mars 2008 à 00:59
tu px m'aider ???
0
GRIETA Messages postés 6 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 28 mars 2008 1
28 mars 2008 à 00:21
COMMENT
j'ai pas compris
en fait jec cherche à programmer le laplacien
0
J'ai réussi a faire le principale du programme je pense mais sa ne trie pas correctement pouvait vous m'aidez s'il vous plait merci d'avance voici mon programme.



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


int main(void)
{

long tableau1[4]={1,12,45,0};
long tableau2[5]={4,5,16,24,0};
long tableau_resultat[100];
int i=0,j=0,nb=0;

while (i <= 5)
{
if (tableau1[i]<tableau2[i])
{
tableau_resultat[j]=tableau1[i];
tableau_resultat[j+1]=tableau2[i];
}
else
{
tableau_resultat[j]=tableau2[i];
tableau_resultat[j+1]=tableau1[i];
}
i++;
j=j+2;
}
for (nb=0;nb<=8;nb++)
{
printf("les tableaux valent %ld\n",tableau_resultat[nb]);
}


system("PAUSE");
return 0;
}
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
31 mars 2008 à 11:49
c'est normal, ton algorithme ne tourne pas rond... en plus, avec un truc comme ça, si tu utilise des tableaux de taille différentes, tu vas encore te retrouver avec un plantage du à une mauvaise allocation mémoire.

while (i <= 5)
{
if (tableau1[i]<tableau2[i])
{
/// etc...
}}
i++;
or tu as tableau1 de taille 4 et tableau2 de taille 5... grumpf!!!
si tu déclares long tableau1[4];
tu as tableau1[0], tableau1[1], tableau1[2], tableau1[3] ET PUIS C'EST TOUT!!!!
tableau1[4] et tableau1[5] n'existent pas!!!! (ou plutôt ne sont pas alloués)
tu t'es retrouvé dans le cas ou le segment de mémoire que tu utilise n'est pas utilisé pour autre chose et c'est pour ça que ça n'a pas planté, mais ça aurait très bien pu planter.

sinon, le mieux pour passer dans tous les cas et voir tous les éléments de ton tableau, c'est de faire des boucles "for" imbriquées.
mais d'abord, tes tableaux "tableau1" et "tableau2" sont-ils triés au départ,
si ils ne sont pas triés, il faut les trier
ensuite, il faut les assembler de façon à ce que la réunion soit triée
il y a des façons de faire avec moins d'itération et en optimisant le tri, mais ça, c'est déjà une méthode qui marche, le reste, c'est du peaufinage.
0
Bien en faite au départ il sont déja trié mais à mon avis pour que le tableau résultat soit trié il faut comparé ligne par ligne j'ai pensé avec 3 while mais sa ne fonctionne pas non plus je ne vois pas trop comment procédé a vrai dire.
merci d'avance de me mettre sur la voix.
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
31 mars 2008 à 13:09
si tes 2 tableaux sont triés, c'est simple.
tu te mets sur le 1er élément de ton 1er tableau
tu vérifie si le 1er élément de ton 2e tableau lui est inférieur
si oui, tu mets le 1er élément du 2e tableau en 1ere position du tableau résultat, puis en restant sur le 1er élément du 1er tableau, tu compares au 2e élément du 2e tableau, et ainsi de suite.
quand tu arrives au dernier élément du 2e tableau, tu passes au 2e élément du 1er tableau et 1er élément du 2e tableau...
etc...
avec 2 boucles for, tu t'en sors... à toi de jouer.
0
oui mais le souci c'est que au bout d'un moment sa bloque



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


int main(void)
{

long tableau1[4]={1,12,45,0};
long tableau2[5]={4,5,16,24,0};
long tableau_resultat[100];
int i=0,j=0,nb=0;

for (i=0;i<4;i++)
{

if (tableau2[i]>tableau1[i])
{
tableau_resultat[j]=tableau1[i];
tableau_resultat[j+1]=tableau2[i];
}
else
{
tableau_resultat[j]=tableau2[i];
tableau_resultat[j+1]=tableau1[i];
}
j++;
j=j+1;
}


for (nb=0; nb != 8;nb++)
{
printf("les tableaux valent %ld\n",tableau_resultat[nb]);
}


system("PAUSE");
return 0;
}

Et la le résultat c'est : 1,4,5,12,16,45,0,24
0
j'ai trouvé sa


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


int main(void)
{

long tableau1[4]={1,12,45,0};
long tableau2[5]={4,5,16,24,0};
long tableau_resultat[100];
int i=0,j=0,k=0,z=0,nb=0;

while (z<9)
{

while (tableau2[i]>tableau1[k])
{
tableau_resultat[j]=tableau1[k];
j++;
k++;
}
while (tableau2[i]<tableau1[k])
{
tableau_resultat[j]=tableau2[i];
j++;
i++;
}
z++;
}


for (nb=0; nb != 8;nb++)
{
printf("les tableaux valent %ld\n",tableau_resultat[nb]);
}


system("PAUSE");
return 0;
}
0
SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
2 avril 2008 à 12:12
visiblement, tu ne sais pas ce que c'est que des boucles imbriquées
je te donne un petit exemple :

int nb1 = 257;
int tab1[257];
int nb2 = 3;
int tab2[3];

// code pour remplir mes tableaux tab1 et tab2

for(int i=0;i<nb1;i++)
{
for(int j=0;j<nb2;j++)
{
printf("la somme de l'élémnet %d du tableau 1 et de l'élément %d du tableau 2 est %d\n",i,j,tab1[i]+tab2[j]);
}
}

dans une même instruction, on joue à la fois sur l'indice de la première et de la 2e boucle, ça te permet de faire des combinaisons qui couvrent toutes les possibilités.
c'est de ça que tu as besoin dans ton cas
0
argentine Messages postés 10 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 3 avril 2008 1
3 avril 2008 à 20:09
slt je vous propose la solution svte :


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

/////////*fction remplir tab*////////
void remplirtableau(int *t,int k)
{ int i=1;
cprintf("Entrez la %d ‚re valeur:",i);/*textcolor pour une ecriture en couleur*/
scanf("%d",&t[i]); /*textcolor(12):couleur rouge*/

for(i=2;i<=k;i++)
{
textcolor(12);
cprintf("Entrez la %d ‚me valeur:",i);
scanf("\n%d",&t[i]);
}
}


////*recherche min dans un tableaux*/////////
int min(int *t,int k,int taille)
{int m;
int mini=t[k];
while(k<=taille)
{
if(mini>=t[k])
{m=k;mini=t[k];}
k++;
}
return(m);
}


void tri(int *t,int taille)
{int inv,inv1;
int i;
int temp;
for(i=1;i<=taille;i++)
{
temp=min(t,i,taille);
inv=t[i];
t[i]=t[temp];
t[temp]=inv;

}
}




void main()
{
int *tab1;
int *tab2;
int *tab;
int max1,max2,n1,n2;
int i=1;
int i1,i2,n;

clrscr();/*pour effacer l'ecrans*/
textcolor(12);
cprintf("Entrez la taille du tableaux1:",n1);
scanf("%d",&n1);

remplirtableau(tab1,n1);

cprintf("Entrez la taille du tableaux2:",n1);
scanf("%d",&n2);

remplirtableau(tab2,n2);

tri(tab1,n1);
tri(tab2,n2);


/***affichage des 2 tableaux ***********/
printf("\nvoici tableaux1:\n\n");
for(i=1;i<=n1;i++)
{textcolor(3);

printf("%d\t",tab1[i]);
}

printf("\nvoici tableaux2:\n\n");
for(i=1;i<=n2;i++)
{ textcolor(5);
printf("%d\t",tab2[i]);
}

/**************************************/
i1=1;i2=1;i=1;
while(i<=n1||i<=n2)
{
if(tab1[i1]<tab2[i2]) {tab[i]=tab1[i1];i1++;i++;}
else {tab[i]=tab2[i2];i2++;i++;}
}
while(i1<=n1) {tab[i]=tab1[i1];i++;i1++;}
while(i2<=n2) {tab[i]=tab2[i2];i++;i2++;}
n=i-1;
textcolor(6);

printf("\n\nvoici le tableau resultat :\n");

for(i=1;i<=n;i++)
printf("\t%d" ,tab[i]);

getch();/*pour stoper sur l'affichage*/

}


si vous avez des probleme avec la solution voici mon email :
argentine85@hotmail.fr
0