Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Débutant et étourdi ; ca ne fait pas bon ménage mais avec un peu d'aide et de persévérance...

27 réponses
Avatar
bpascal123
Bonjour,

Voici le script qui me fait tourner la t=EAte car ca fonctionne pour un
nombre qui fait partie de la premi=E8re partie du tableau mais pas de la
seconde ???

=3D=3D=3D

#include <stdio.h>

main()
{
int Tab[100] ;
int N ;

int VAL ;
int POS ;
int midPOS ;
int op ;
int i, j ;
int cnt =3D 1 ;
int permut1 ;

printf("\n\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\n\n") ;

printf("Ce prg lit, affiche un tableau et y recherche une
valeur et
sa position.") ;

printf("\n\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\n\n") ;

printf("Entrez le nbr de valeurs : ") ;
scanf("%d", &N);

for ( i =3D 0 ; i < N ; i++ )
{
Tab[i] =3D op * 10 / 8 + 3 * 2 ;
op =3D Tab[i] ;
printf("%4d", Tab[i]) ;
}

printf("\n\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\n\n") ;

for ( i =3D 0 ; i < N ; i++ )
{
if ( Tab[i] > Tab[i+1] )
{
permut1 =3D Tab[i] ;
Tab[i] =3D Tab[i+1] ;
Tab[i+1] =3D permut1 ;
}
}

printf("Tableau trie : \n") ;

for ( i =3D 0 ; i < N ; i++ )
printf("%4d", Tab[i]) ;

printf("\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\n\n") ;

printf("Entrez une valeur a rechercher : \n\n") ;
scanf("%d", &VAL ) ;

printf("\n\n") ;

midPOS =3D N/2 ;

if ( VAL < Tab[midPOS] )
{
for ( i =3D 0, POS=3D0 ; i < midPOS ; i+
+ )
if ( Tab[i] =3D VAL )
POS =3D i ;
printf("(tri 1ere moitie) \t La valeur se trouve en
position %d", POS
+1);
}

else if ( VAL >=3D Tab[midPOS] )
{
for ( i =3D midPOS ; i < N ; i+
+ )
{
if ( Tab[i] =3D VAL )
{
POS =3D i;
}
}
printf("(tri 2nde moitie) \t La valeur se trouve en
position %d", POS
+1) ;
}

else
printf("No match!") ;

printf("\n\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\n\n") ;

return 0 ;

10 réponses

1 2 3
Avatar
candide
a écrit :
Bonjour,

Mes excuses aux uns et aux autres. J'ai en premier eu le sentiment que
bien qu'en l'absence d'un modérateur dans ce groupe qui peut ralentir
la publication de message ou filtrer les messages hors sujet, il y a
avait "un protocole" tel que s'annoncer à une personne importante,
annoncer pourquoi on veut la voir etc...attendre avant l'entretien -je
me suis un peu laissé emporter car exécuter ce script me semble simple
à comprendre ou peut-être c'est parce que je ne suis pas rapide et
j'ai passé la journée à essayer de faire marcher ce programme.



Je te rappelle que tu n'as toujours pas expliqué CLAIREMENT ce que tu souhaites
faire avec le programme que tu as donné. Au final, ton problème est-il un
problème de C ou un problème d'algorithmique ? difficile de le dire. Je subodore
que ton programme fait beaucoup trop et donc beaucoup trop compliqué par rapport
à ce que tu souhaites faire. Typiquement ton programme contient des parties
redondantes ce qui en général traduit une mauvaise construction. L'exécution
d'un programme C, ce sont des fonctions qui communiquent les unes avec les
autres. La division en fonctions permet de lire et écrire facilement le
programme et ça permet surtout de le "déboguer" car il suffit de tester les
fonctions les unes après les autres. Or, ton code ne contient aucune fonction
(autre que main()), ça m'étonnerait qu'en plusieurs mois d'apprentissage tu
n'aies pas appris à les utiliser.


Je commence à apprendre le C avec 2 ouvrages et l'un des ouvrage




Et de quels ouvrages s'agit-il ?


Encore mes excuses pour la réponse précédente, je reconnais que ce
n'est pas une façon d'attendre une réponse.




Oui et je t'ai parlé des messages d'avertissement et d'erreur que te passe le
compilateur et je n'ai vu aucune mention de cela dans ta réponse ce qui me
semble une fois de plus bien cavalier.
Avatar
bpascal123
Bonjour,

Je me suis volontairement en mode pause sur l'exécution de ce
programme. En fait, j'ai lu que while et for sont équivalents. Il m'a
semblé réussir à faire fonctionner ce programme avec while (d'après la
solution qui ne fonctionne pas sans être modifiée, je pense). Je poste
la solution officielle un peu plus bas. Je n'y arrive pas avec ce mode
de tri, le tri croissant n'a pas posé de difficultés mais je comprends
que pour les grandes bases de données, le tri croissant n'est peut
prendre plus de temps...

Je te rappelle que tu n'as toujours pas expliqué CLAIREMENT ce que tu s ouhaites
faire avec le programme que tu as donné. Au final, ton problème est-i l un
problème de C ou un problème d'algorithmique ?



C'est un problème de C... je n'ai pas essayé de poser le problème pou r
remplacer while par for autrement que directement en programmant une
boucle for à partir de la solution de l'auteur. Avec la soudaine
chaleur de ces derniers jours (à Paris) j'ai eu du mal à rester
concentré et j'ai passé beaucoup de temps à essayer de faire
fonctionner ce programme. J'envisage de passer à un autre programme
qui me donnera peut-être une solution pour celui-là.

Et de quels ouvrages s'agit-il ?



2 livres qui contiennent des exemples plus ou moins complets ;
et actuellement le site web suivant qui contient les exercices que
j'essaie de comprendre (j'ai commencé il y a peu de temps, avant
j'apprenenais plus ou moins par coeur...) : http://www.ltam.lu/Tutoriel_Ans i_C/

========================= ===============
LA VERSION AVEC FOR ...donne un résultat "inattendue"
========================= ===============

#include <stdio.h>

main()
{
int Tab[50] ;
int N ;

int VAL ;
int POS ;
int midPOS ;
int op ;
int i, j ;
int cnt = 1 ;
int permut1 ;

printf("nn==================== ==========nn") ;

printf("Ce prg lit, affiche un tableau et y recherche une valeur et
sa position.") ;

printf("nn===============nn") ;

printf("Entrez le nbr de valeurs : ") ;
scanf("%d", &N);

for ( i = 0 ; i < N ; i++ )
{
Tab[i] = op * 10 / 8 + 3 * 2 ;
op = Tab[i] ;
printf("%4d", Tab[i]) ;
}

printf("nn===============nn") ;

for ( i = 0 ; i < N ; i++ )
{
if ( Tab[i] > Tab[i+1] )
{
permut1 = Tab[i] ;
Tab[i] = Tab[i+1] ;
Tab[i+1] = permut1 ;
}
}

printf("Tableau trie : n") ;

for ( i = 0 ; i < N ; i++ )
printf("%4d", Tab[i]) ;

printf("n===============nn") ;

printf("Entrez une valeur a rechercher : nn") ;
scanf("%d", &VAL ) ;

printf("nn") ;

midPOS = N/2 ;

if ( VAL < Tab[midPOS] )
{ for ( i = 0, POS=0 ; i < midPOS ; i++ )
if ( Tab[i] = VAL )
POS = i ;
printf("(tri 1ere moitie) t La valeur se trouve en position %d", POS
+1);

}

else if ( VAL >= Tab[midPOS] )
{
for ( i = midPOS ; i < N ; i++ )
{
if ( Tab[i] = VAL )
{
POS = i;
}
}
printf("(tri 2nde moitie) t La valeur se trouve en position %d", POS
+1) ;
}

else
printf("Pas de valeurs") ;

printf("nn==================== ==========nn") ;


return 0 ;

}


========================= ===============
LA VERSION AVEC WHILE : un peu modifié
========================= ===============

#include <stdio.h>
main()
{
/* Déclarations */
int A[50]; /* tableau donné */
int VAL; /* valeur à rechercher */
int POS; /* position de la valeur */
int N; /* dimension */
int i, op ; /* indice courant */
int INF, MIL, SUP; /* limites du champ de recherche */

/* Saisie des données */


printf("nn==================== ==========nn") ;

printf("Ce prg lit, affiche un tableau et y recherche une valeur et
sa position.") ;

printf("nn===============nn") ;

printf("Entrez le nbr de valeurs : ") ;
scanf("%d", &N);

for ( i = 0 ; i < N ; i++ )
{
A[i] = op * 10 / 8 + 6 ;
op = A[i] ;
printf("%4d", A[i]) ;
}

printf("nn===============nn") ;


printf("Elément à rechercher : ");
scanf("%d", &VAL );


/* Initialisation des limites du domaine de recherche */
INF=0;
SUP=N-1;
/* Recherche de la position de la valeur */
POS=-1;
while ((INF<=SUP) && (POS==-1))
{
MIL=(SUP+INF)/2;
if (VAL < A[MIL])
POS = MIL-1;
else if (VAL > A[MIL])
POS = MIL+1;
else
POS = MIL;
}

/* Edition du résultat */

if (POS==-1)
printf("La valeur recherchée ne se trouve pas "
"dans le tableau.n");
else
printf("La valeur %d se trouve à la position %d. ===> %d n" ,
VAL, POS, MIL);

return 0;
}



========================= =============

Je n'ai pas encore abordé le chapitre des fonctions (enfin, très peu),
j'essaie de comprendre les structures de base avant d'en arriver là.

Si ca peut convenir pour m'éclairer un peu, merci (j'ai pris
l'initiative d'apprendre le C sans me fixer d'échéances particulières )

Pascal
Avatar
candide
a écrit :

Je me suis volontairement en mode pause sur l'exécution de ce
programme. En fait, j'ai lu que while et for sont équivalents. Il m'a
semblé réussir à faire fonctionner ce programme avec while (d'après la
solution qui ne fonctionne pas sans être modifiée, je pense). Je poste
la solution officielle un peu plus bas. Je n'y arrive pas avec ce mode
de tri, le tri croissant n'a pas posé de difficultés mais je comprends
que pour les grandes bases de données, le tri croissant n'est peut
prendre plus de temps...




Bon, je comprends rien à ce que tu dis ni à quoi tu fais référence, je crois que
tu n'a pas la bonne méthode d'apprentissage.


Je te rappelle que tu n'as toujours pas expliqué CLAIREMENT ce que tu souhaites
faire avec le programme que tu as donné. Au final, ton problème est-il un
problème de C ou un problème d'algorithmique ?



C'est un problème de C... je n'ai pas essayé de poser le problème pour
remplacer while par for autrement que directement en programmant une
boucle for à partir de la solution de l'auteur.



Je te signale que tu n'as toujours pas dit quel problème tu cherchais à
résoudre. Donne l'énoncé complet et original.



Et de quels ouvrages s'agit-il ?



2 livres qui contiennent des exemples plus ou moins complets ;




T'as vraiment du mal : c'est quoi les deux ouvrages (leur titre) ?

======================================= > LA VERSION AVEC FOR ...donne un résultat "inattendue"
=======================================



Je comprends rien à tes histoires de version while et version for et ton tri
croissant ou décroissant. Personne sur ce forum ne va rentrer à ce niveau de
détails de ton problème.

De deux choses l'une :

*) ou bien tu veux apprendre de manière plus ou moins approfondie le langage C
*) ou bien tu veux apprendre à utiliser un langage de programmation (le C par
exemple) pour résoudre des problèmes.

Ce sont des problèmes bien distincts.

Si tu veux apprendre le C, voici trois conseils généraux, au vu de ton programme
ci-dessus, tu ne les as pas appliqués.

*) Fondamental : apprendre à régler son compilateur avec les bonnes options,
Lire les avertissements qu'il envoie et modifier son code pour qu'il n'y ait en
sortie ni error, ni warning (ie avertissement). Je t'ai donné un lien dans un
message précédent.

*) Ne travailler d'abord qu'avec des petits morceaux de code. Ton code donné
ci-dessus est beaucoup trop volumineux.

*) Limiter le plus possible tout ce qui est entrée (scanf() and Co) qui sont des
sources d'erreur, limiter aussi les sorties et tous les affichages bling-bling
et qui sont là encore sources d'erreurs (artificielles).


Par ailleurs, il faut que tu apprennes rapidement à utiliser des fonctions, plus
tu attends plus tu vas t'habituer à faire sans au risque de ne pas arriver à les
utiliser. Avec une fonction, tu peux en quelque sorte isoler du code et en
écrivant et testant ta fonction, tu peux te concentrer sur une partie bien
délimitée de ton programme sans interférance avec le reste. Mais je reconnais
qu'il n'est pas si facile d'apprendre à utiliser des fonctions (où déclarer ?
comment passer les paramètres ? quoi retourner ? comment retourner ? problèmes
de portée, passage par valeurs, passage de pointeurs, etc).
Avatar
Pierre Maurette
candide, le 29/06/2009 a écrit :
a écrit :

Je me suis volontairement en mode pause sur l'exécution de ce
programme. En fait, j'ai lu que while et for sont équivalents. Il m'a
semblé réussir à faire fonctionner ce programme avec while (d'après la
solution qui ne fonctionne pas sans être modifiée, je pense). Je poste
la solution officielle un peu plus bas. Je n'y arrive pas avec ce mode
de tri, le tri croissant n'a pas posé de difficultés mais je comprends
que pour les grandes bases de données, le tri croissant n'est peut
prendre plus de temps...




Bon, je comprends rien à ce que tu dis ni à quoi tu fais référence, je crois
que tu n'a pas la bonne méthode d'apprentissage.



Ou alors c'est vous, connard...


Je te rappelle que tu n'as toujours pas expliqué CLAIREMENT ce que tu
souhaites faire avec le programme que tu as donné. Au final, ton problème
est-il un problème de C ou un problème d'algorithmique ?



C'est un problème de C... je n'ai pas essayé de poser le problème pour
remplacer while par for autrement que directement en programmant une
boucle for à partir de la solution de l'auteur.



Je te signale que tu n'as toujours pas dit quel problème tu cherchais à
résoudre. Donne l'énoncé complet et original.



Eh bien vous l'oubliez, au lieu de continuer à salir votre culotte. Vos
réponses sont celles d'un Emmanuel Delahaye sans le talent.


Et de quels ouvrages s'agit-il ?



2 livres qui contiennent des exemples plus ou moins complets ;




T'as vraiment du mal : c'est quoi les deux ouvrages (leur titre) ?



Ah, leur titre(*). Pas l'ISBN ?

(*) J'aurais courageusement tenté " ( leurs titres ) ". Mais va savoir
...

======================================= >> LA VERSION AVEC FOR ...donne un résultat "inattendue"
======================================= >



Je comprends rien à tes histoires de version while et version for et ton tri
croissant ou décroissant. Personne sur ce forum ne va rentrer à ce niveau de
détails de ton problème.

De deux choses l'une :

*) ou bien tu veux apprendre de manière plus ou moins approfondie le langage
C *) ou bien tu veux apprendre à utiliser un langage de programmation (le C
par exemple) pour résoudre des problèmes.

Ce sont des problèmes bien distincts.

Si tu veux apprendre le C, voici trois conseils généraux, au vu de ton
programme ci-dessus, tu ne les as pas appliqués.

*) Fondamental : apprendre à régler son compilateur avec les bonnes options,
Lire les avertissements qu'il envoie et modifier son code pour qu'il n'y ait
en sortie ni error, ni warning (ie avertissement). Je t'ai donné un lien dans
un message précédent.

*) Ne travailler d'abord qu'avec des petits morceaux de code. Ton code donné
ci-dessus est beaucoup trop volumineux.

*) Limiter le plus possible tout ce qui est entrée (scanf() and Co) qui sont
des sources d'erreur, limiter aussi les sorties et tous les affichages
bling-bling et qui sont là encore sources d'erreurs (artificielles).


Par ailleurs, il faut que tu apprennes rapidement à utiliser des fonctions,
plus tu attends plus tu vas t'habituer à faire sans au risque de ne pas
arriver à les utiliser. Avec une fonction, tu peux en quelque sorte isoler du
code et en écrivant et testant ta fonction, tu peux te concentrer sur une
partie bien délimitée de ton programme sans interférance avec le reste. Mais
je reconnais qu'il n'est pas si facile d'apprendre à utiliser des fonctions
(où déclarer ? comment passer les paramètres ? quoi retourner ? comment
retourner ? problèmes de portée, passage par valeurs, passage de pointeurs,
etc).



Pôvre Khon...

--
Pierre Maurette
Avatar
candide
Pierre Maurette a écrit :

Bon, je comprends rien à ce que tu dis ni à quoi tu fais référence, je
crois que tu n'a pas la bonne méthode d'apprentissage.



Ou alors c'est vous, connard...




Le déballage des malheureuses fautes d'orthographe dans ton livre t'a vraiment
rendu très colérique.


(*) J'aurais courageusement tenté " ( leurs titres ) ". Mais va savoir ...




Dans le genre maso ...



Pôvre Khon...




Ah je vois que Monsieur est inspiré !
Avatar
bpascal123
> Je te signale que tu n'as toujours pas dit quel problème tu cherchais à
résoudre. Donne l'énoncé complet et original.



=>L'énoncé complet sur http :

http://www.ltam.lu/Tutoriel_Ansi_C/

Exercice 7.12

>> Et de quels ouvrages s'agit-il ?



=> il y a peu de lien avec les livres pour ce programme mais si tu
veux vraiment savoir de quoi il s'agit ;
les 2 achetés d'occasion, pas très récents mais pour comprendre des
choses simples et aborder du code plus complet ça me convient (je ne
ferais pas d'investissement supplémentaires.) :

Le Langage C de Tony Zhang chez Campus Press,
Le Langage C de G. Willms chez PC Poche...


Je comprends rien à tes histoires de version while et version for et to n tri
croissant ou décroissant. Personne sur ce forum ne va rentrer à ce ni veau de
détails de ton problème.




=> J'ai lu que FOR peut être remplacer par WHILE autant de fois que
WHILE peut être remplacer par FOR.
Je n'arrive pas pour ce programme à remplacer l'un par l'autre et je
ne suis pas arriver à faire fonctionner ce programme --- Ce sont les 2
problèmes. J'ai oublié un mot dans le post précédent, je comprends
qu'entre un tri croissant et un tri en partant du milieu, le tri en
partant du milieu est plus rapide.

De deux choses l'une :



*) ou bien tu veux apprendre de manière plus ou moins approfondie le la ngage C
*) ou bien tu veux apprendre à utiliser un langage de programmation (le C par
exemple) pour résoudre des problèmes.



=> Je ne sais pas ce que je veux, j'occupe mon temps à apprendre le
langage C tout comme une personne apprendrais l'astronomie sans
forcément être navigateur je suppose.


*) Fondamental : apprendre à régler son compilateur avec les bonnes o ptions
Par ailleurs, il faut que tu apprennes rapidement à utiliser des foncti ons, plus
tu attends plus tu vas t'habituer à faire sans au risque de ne pas arri ver à les
utiliser.



J'ai visité divers site sur le web ou il y a des exercices de
différents niveaux et le site mentionné plus haut me semble convenir
pour progresser. Le chapitre des fonctions vient après les pointeurs.
A la vitesse ou je comprends les choses et le temps que ça prend au
dehors du travail risque de m'amener au chapitre des fonctions dans
quelques mois. Je ne veux pas sauter les étapes, je n'ai pas été une
flèche à l'école et ce je ne fais pas de l'informatique une priorit é
absolue.
Avatar
espie
In article ,
wrote:
http://www.ltam.lu/Tutoriel_Ansi_C/
Le Langage C de Tony Zhang chez Campus Press,
Le Langage C de G. Willms chez PC Poche...



J'ai visité divers site sur le web ou il y a des exercices de
différents niveaux et le site mentionné plus haut me semble convenir
pour progresser. Le chapitre des fonctions vient après les pointeurs.
A la vitesse ou je comprends les choses et le temps que ça prend au
dehors du travail risque de m'amener au chapitre des fonctions dans
quelques mois. Je ne veux pas sauter les étapes, je n'ai pas été une
flèche à l'école et ce je ne fais pas de l'informatique une priorité
absolue.



Je ne sais pas quel site ou bouquin dans le lot aborde les pointeurs avant
les fonctions, mais c'est carrement nocif ! Commence par prendre de bonnes
habitudes de decoupage de code, les pointeurs peuvent venir un peu apres...

Meme si c'est un peu artificiel, on peut s'amuser beaucoup en C avec juste
tableaux, variables entieres et fonctions, et rajouter les pointeurs
ensuite... (on peut tres bien, dans un premier temps, presenter le
scanf("%d", &i) comme une construction magique qu'on expliquera plus
tard).

Accessoirement, si tu veux qu'on t'aide, apprend a bosser avec nous. Ca n'est
pas normal qu'on doive si reprendre a n fois pour que tu daignes enfin nous
donner tes sources (que ce soit le site web ou se trouve l'exercice que
tu essaies de faire, ou que ce soit ta bibliographie).

Essaie de te mettre a notre place: on ne sait pas du tout si ce qu'on va
ecrire va servir a quelque chose, ni n'est approprie, parce qu'on ne sait
pas ou tu en es.

Apprendre le C en autodidacte, c'est courageux. Tu as interet a faire
preuve d'enormement de rigueur: le C est un langage qui ne pardonne aucune
erreur, et les comportements bizarres en cas de bug sont difficiles a
diagnostiquer. Comme deja dit, considere tout avertissement de ton compilo
comme une erreur. Meme si c'est un peu chiant, astreins-toi a formuler
correctement ce que tu veux faire, et a expliquer mieux pourquoi ca ne
donne pas ce que tu veux (tu as du repeter au moins 4 fois que while et
for ne marchaient pas pareil pour toi, mais tu n'as toujours pas donne
les exemples de code correspondants...)

Si tu fais un peu plus attention, dans pas mal de cas, tu trouveras tout seul,
mais il faut que tu ameliores tes techniques de travail. Sinon, tu vas vite
te decourager (c'est le langage qui veut ca, C n'est vraiment pas du tout
du tout gentil avec le debutant un peu approximatif dans ses pensees...)
Avatar
candide
a écrit :
Je te signale que tu n'as toujours pas dit quel problème tu cherchais à
résoudre. Donne l'énoncé complet et original.



=>L'énoncé complet sur http :

http://www.ltam.lu/Tutoriel_Ansi_C/

Exercice 7.12







Bon OK, l'énoncé complet est :

======================================== 8< ======================= 7.3. Exercices d'application

Remarque

Les exercices sur les tableaux sont partagés en deux séries:

a) Tableaux à une dimension - Vecteurs

b) Tableaux à deux dimensions - Matrices

Schéma

Les exercices des deux séries sont à traiter d'après le même schéma:

- Déclaration des variables

- Lecture des dimensions des tableaux

- Lecture des données des tableaux

- Traitements

- Affichage des résultats

Choisissez les dimensions maximales appropriées pour les tableaux.


Problème: Rechercher dans un tableau d'entiers A une valeur VAL entrée au
clavier. Afficher la position de VAL si elle se trouve dans le tableau, sinon
afficher un message correspondant. La valeur POS qui est utilisée pour mémoriser
la position de la valeur dans le tableau, aura la valeur -1 aussi longtemps que
VAL n'a pas été trouvée.

Implémenter deux versions:

a) La recherche séquentielle

Comparer successivement les valeurs du tableau avec la valeur donnée.

b) La recherche dichotomique ('recherche binaire', 'binary search')

Condition: Le tableau A doit être trié

Comparer le nombre recherché à la valeur au milieu du tableau,

- s'il y a égalité ou si le tableau est épuisé, arrêter le traitement avec un
message correspondant.

- si la valeur recherchée précède la valeur actuelle du tableau, continuer la
recherche dans le demi-tableau à gauche de la position actuelle.

- si la valeur recherchée suit la valeur actuelle du tableau, continuer la
recherche dans le demi-tableau à droite de la position actuelle.

Ecrire le programme pour le cas où le tableau A est trié par ordre croissant.

Question: Quel est l'avantage de la recherche dichotomique? Expliquer brièvement.
======================================== >8 =======================
Malgré les apparentes précisions de l'énoncé, il peut y avoir plusieurs
scénarios pour gérer les entrées. Ainsi, l'énoncé dit que le nombre d'entrées
est donné par l'utilisateur mais comme on doit faire un tableau il faut donner
une précision supplémentaire (la taille maximale) puisque les tableaux en C ont
une taille qui doit être connue à l'écriture du programme. Donc, cela veut dire
qu'on va allouer un tableau de 50 entiers pour un tableau qui en contient 5,
c'est idiot.

Je persiste à dire que c'est une mauvaise pratique qu'un cours n'introduise pas
très rapidement les fonctions.

Ensuite pour la recherche séquentielle dans un tableau, c'est essentiellement
une boucle qui parcourt le tableau mais avec des variations pour sortir de la
boucle :

*) attend-on ou pas jusqu'à la fin du tableau même si on a trouvé en cours de
route ?
*) et si on décide de quitter dès qu'on trouve la valeur, cela peut encore se
faire de plusieurs façons (utiliser ou pas break).


Pour la recherche dichotomique (et non "recherche binaire" qui est une
traduction mot à mot de l'anglais), à voir comment tu as transformé en boucle
for la solution proposée sur le site avec la boucle while, je pense que tu n'as
pas compris l'algorithme ce qui ne m'étonne vu la piètre qualité des
explications de l'énoncé. En fait, ce que tu as fait c'est partager le tableau
en 2, examiner par la méthode séquentielle la présence de l'élément dans la
partie gauche, examiner par la méthode séquentielle la présence de l'élément
dans la partie droite. Tu n'as pas compris que la méthode était _itérative_ (et
si tu ne l'as pas compris, c'est que l'énoncé n'était pas clair et de toute
façon, cette méthode en fait n'est pas si évidente que ça).

Là encore, la latitude pour coder est extrêmement large, il y a de quoi se
perdre et si tu veux apprendre le C, ce n'est pas ça qu'il faut faire.



Dans l'autre post, tu parles des boucles while versus for. C'est à peu près
équivalent (pas tout à fait en réalité, cf. la Norme pour les détails). Là
encore la question se pose de savoir si le débutant doit être au courant de cela
et surtout quand dans son apprentissage il doit apprendre cela. C'est creuser ce
genre de détail en fait de peu d'importance qui ralentit beaucoup l'apprentissage.

Exemple de boucle while : soit à déterminer pour quelle valeur de l'entier n la
somme 1+2+3+4+...+n dépasse 10000.


#include <stdio.h>

int main(void)
{
int i = 1;
int s = 0;

while (s < 10000)
{
s = s + i;
i++;
}

printf("i=%d s=%dn", i-1, s);
return 0;
}


On pourrait ainsi récrire le programme avec une boucle for de la manière
suivante :

#include <stdio.h>

int main(void)
{
int i = 1;
int s = 0;

for (;s < 10000;i++)
s = s + i;

printf("i=%d s=%dn", i-1, s);
return 0;
}



Assez souvent, on utilise une boucle for au lieu d'une boucle while ou une
boucle do-while lorsque le nombre d'itérations est connu à l'avance. La
nécessité d'initialiser certaines variables avant le démarrage de la boucle et
la présence d'un compteur à incrémenter peut faire choisir une boucle for. Une
boucle for qui effectue une boucle 10 fois a l'allure idiomatique suivante :

for (i=0;i<10;i++)
/* corps de la boucle */




Le Langage C de Tony Zhang chez Campus Press,
Le Langage C de G. Willms chez PC Poche...




Je ne connais pas le deuxième mais je préfère ne pas te dire ce que je pense du
premier.


=> Je ne sais pas ce que je veux,



OK


*) Fondamental : apprendre à régler son compilateur avec les bonnes options
Par ailleurs, il faut que tu apprennes rapidement à utiliser des fonctions, plus
tu attends plus tu vas t'habituer à faire sans au risque de ne pas arriver à les
utiliser.



J'ai visité divers site sur le web ou il y a des exercices de
différents niveaux et le site mentionné plus haut me semble convenir
pour progresser. Le chapitre des fonctions vient après les pointeurs.



OK alors tu ne verras jamais les fonctions ;)

Tu veux pas essayer Python ? ;)
Avatar
Antoine Leca
Le 27/06/2009 10:36Z, Pascal écrivit :
J'ai en premier eu le sentiment que
bien qu'en l'absence d'un modérateur dans ce groupe qui peut ralentir
la publication de message ou filtrer les messages hors sujet,



Euh... Bon, un peu d'histoire : tu es sur Usenet, qui précède et de
beaucoup les forums PHP. Les modérateurs, par exemple, ont été _rajouté_
pour contrer certains excès sur Usenet, au départ tous les forums
marchaient sans modérateurs.


il y a avait "un protocole"



Oui. En gros, c'est *lire* pendant quelque temps *avant* de poster le
moindre message. Je conseillerais de passer deux ou trois jours, en
récupérant tous les messages du serveur et en suivant une conversation
en direct, pour comprendre la vitesse de réaction, qui assez différente
de celle des blogs. Par exemple, il faut savoir attendre au moins 24
heures pour s'impatienter...

Faire cet exercice de participation passive n'évite pas d'être
instantanément répéré comme bleubite, mais il évite au moins de s'y
prendre à l'envers et de se faire rentrer dedans violemment, ce qui ne
fait pas plaisir.


Un autre élément du protocole est que l'on aime pas les messages longs
et verbeux, cela donne des réponses souvent lapidaires et une aversion
pour les messages qui citent la totalité du message auquel ils répondent
(cela vient de la nécessité historique de réduire la taille des messages
lorsque les disques des serveurs se mesuraient en Mio, pas en Tio).


Par contre, comme il est facile de relire un message émis quelques jours
plus tôt, une bonne habitude consiste à d'abord expliquer de quoi il
s'agit (comme tu le fais dans le message auquel je réponds), par exemple
dans le message de tête d'enfilade.


Antoine
Avatar
bpascal123
> Tu veux pas essayer Python ? ;)



Avant d'essayer, j'aimerais finir ce que j'ai commenC !

En fait, je ne connais pas les formations en informatique. Je sais que
là ou je travaillais avant à Londres, il y avait un suédois
administrateur réseau qui à la base était de formation en musique -
guitare.

Je pense dans les formations en informatique classiques ; BTS, DUT...
il y a plusieurs matières d'enseignées ; algo, pascal, C, Java, Ada,
Php et après des modules de spécialisation suivant l'orientation web
development, bdd, programmation systèmes...

Je considère que si je consacre approx 1200 heures sur 1-3 ans suivant
ma situation professionnelle, familiale, j'aurais de bonnes bases pour
envisager soit une spécialisation en C si je deviens "accroc" soit une
orientation vers le web development ou des langages qui sont
susceptibles de répondre à mes besoins professionnelles comme VBA.

Python peut être un choix judicieux si Microsoft arrête de supporter
VBA et que les suites bureautiques deviennent de plus en plus des
solutions en ligne sous web2.0. Je ne suis pas sûre de ce que j'avance
n'ayant pas reçu une formation en informatique autre que par les sites
web grand-publics.
1 2 3