Langage C

Discutez d'informatique ici !
Billball
Membre Complexe
Messages: 2669
Enregistré le: 31 Mar 2006, 19:13

langage C

par Billball » 09 Jan 2010, 17:26

bonsoir,

je suis a la recherche d'un site proposant des exos de programmation (corrigé inclut..) en C car je ne trouve pas de site très "riche"

merci :we:



Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 10 Jan 2010, 01:34

salut,

il n'y a pas vraiment de "solution" a un probleme.
Pour débuter, tu peux commencer tranquille avec le site du zero, et apprendre les bases. Une fois que c'est acquis, il te suffit d'imaginer un probleme que tu souhaites résoudres...et de le compliquer toi même une fois résolu.

ex :
creer une matrice
puis
calculer une somme de matrices
puis
calculer un produit de matrice.
calculer la norme d'une matrice.
inverser une matrice...
Proposer une diagonalisation, etc...
Si tu sais que tu sais faire, pas la peine de perdre du temps!

Au début, tu vas en chier sur la syntaxe et surtout sur le debuggage, mais ca vient assez vite. La ou ca devient plus intéressant c'est quand pour un probleme donné, tu ponds un algo, et tu réfléchis a comment faire un truc beau. C'est pour ca que ya pas vraiment de "correction" a proprement parler, parce qu'il peut y avoir plusieurs solutions! Certaines étant meilleure que d'autres ( et meilleure dépend de ce qu'on cherche, lisibilité, réutilisabilité, vitesse d'execution, ...)
la vie est une fête :)

Billball
Membre Complexe
Messages: 2669
Enregistré le: 31 Mar 2006, 19:13

par Billball » 10 Jan 2010, 09:06

le truc c que, jeudi j'ai une épreuve écrite dessus... mais en faite, quand il faut composer le programme sans l'avoir en td, je sais pas par ou commencer !! de plus on aura le droit au cahier donc voila, mais par exemple si on me dit : "Ecrire la somme des n entiers premiers naturels, avec n rentré au clavier" je serais pas cmt faire ...

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 10 Jan 2010, 10:32

ben essaie d'y faire!
De toute façon, tu travailles plus pour toi que pour la note (bon, même si c'est généralement important en première année). Au moins au début, c'est important d'être capable de faire soi-même ses propres algo.

par ailleurs, tu trouveras certainement des thread avec des algo de C sur le forum de developpez.com. Mais bon, jmaintiens que jpense que c'est mieux que tu crees toi même tes propres exos (par rapport à ce qu'on attend de toi (en l'occurrence sûrement des boucles, des tableaux et des procedures) ) et que tu essaies de les résoudre (ceux que tu sais pas résoudre)

Si tu butes sur un problème, tu peux toujours poser des questions!
la vie est une fête :)

abcd22
Membre Complexe
Messages: 2426
Enregistré le: 13 Jan 2006, 14:36

par abcd22 » 10 Jan 2010, 11:45

Bonjour,
Billball a écrit:quand il faut composer le programme sans l'avoir en td, je sais pas par ou commencer !! de plus on aura le droit au cahier donc voila, mais par exemple si on me dit : "Ecrire la somme des n entiers premiers naturels, avec n rentré au clavier" je serais pas cmt faire ...

« saurais » du verbe savoir, « serais » c'est le verbe être.

C'est l'algorithmique ou la traduction de l'algorithme en un programme qui pose problème ?

Par exemple pour « écrire la somme des n premiers entiers naturels » (je suppose que c'est ça l'énoncé correct), en ne s'occupant pas de comment on obtient n pour l'instant, qu'est-ce qu'on fait (sans utiliser de langage de programmation) ?

Billball
Membre Complexe
Messages: 2669
Enregistré le: 31 Mar 2006, 19:13

par Billball » 10 Jan 2010, 12:16

bah en faite, c'est plutot ce qu'il faut utiliser pour l'écrire mon problème et non comment l'écrire (si je saurais ce qu'il faut utiliser!!)

pour « écrire la somme des n premiers entiers naturels » , je pourrais juste dire qu'il faudrait définir la somme ... c'est ca qui me manque justement !

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 10 Jan 2010, 17:03

re,

ben classiquement, tu fixes n = 3.
Tu cherches les trois premiers entiers premiers.
Tu fais la somme des trois premiers entiers premiers.

2 est premier? oui
3 est premier? oui
4 est premier? non
5 est premier? oui

Somme : 2+3+5 = 8

Tu peux remarquer (pe) que c'est pas le mieux, mais ca peut repondre au probleme :-).
C'est souvent utile de simuler le principe de raisonnement pdt que tu ecris ton algo (en francais)
la vie est une fête :)

abcd22
Membre Complexe
Messages: 2426
Enregistré le: 13 Jan 2006, 14:36

par abcd22 » 10 Jan 2010, 17:08

Billball a écrit:bah en faite, c'est plutot ce qu'il faut utiliser pour l'écrire mon problème et non comment l'écrire (si je saurais ce qu'il faut utiliser!!)

savais
pour « écrire la somme des n premiers entiers naturels », je pourrais juste dire qu'il faudrait définir la somme ... c'est ca qui me manque justement !

Pour faire ça, on commence par prendre s qui vaut 0, puis ajouter 1, puis 2, ..., puis n - 1 (les n premiers entiers naturels sont 0..n - 1).
Donc l'algorithme à utiliser dans ton exemple ici c'est :
Code: Tout sélectionner
définir une variable s, initialisée à 0
lire un entier entré au clavier, le stocker dans la variable n
si n > 0, faire
    pour i allant de 1 à n - 1, faire
        s <- s + i
    fin de la boucle pour
fin du si
retourner s

Une fois qu'on a ça c'est facile de le traduire en un programme.

Si ce qui te pose problème c'est de trouver ce que j'ai écrit ci-dessus mais que tu n'as pas de problème à le traduire en un programme C, tu devrais plutôt chercher des exercices d'algorithmique que des exercices sur le langage C, mais je ne peux pas plus t'aider que ça, je ne sais pas ce qui est disponible sur internet à ce sujet (il doit y avoir divers cours de prépa ou de fac mais ça m'étonnerait qu'ils contiennent des exercices corrigés).

abcd22
Membre Complexe
Messages: 2426
Enregistré le: 13 Jan 2006, 14:36

par abcd22 » 10 Jan 2010, 17:12

fatal_error a écrit:Tu fais la somme des trois premiers entiers premiers.

Je pense que la question est « la somme des n premiers entiers naturels, qu'ils soient premiers ou non », si on ajoute en plus la condition que les nombres soient premiers, il faut définir une fonction qui fait le test de primalité, ce qui est un exercice en soi.

Billball
Membre Complexe
Messages: 2669
Enregistré le: 31 Mar 2006, 19:13

par Billball » 12 Jan 2010, 20:44

oui mais la c'est facile donc ca va ... par contre quand c'est genre (truc que j'ai eu en td noté) :

on considére un tableau de 20 entiers tab initialisés à l'aide d'accolades. Ecrire un programme qui calcule la somme alterné S des éléments d'indice pair du tableau, i.e S=tab[0]-tab[2]+tab[4]-tab[6] + ... tab[18]

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 12 Jan 2010, 21:39

ben ya pas vraiment de méthode générale pour résoudre un algo, faut "juste" (a prendre avec des pincettes) arriver a bien décomposer ce qu'on veut faire.

ici tu veux ajouter 2 a chaque fois, et une fois sur deux le considérer comme une soustraction.

Une methode basique :
Je passe les initialisations


pour tous les entiers e de 0 a 20 - 1
si e est multiple de 4 (alors on fait une addition)
S = S + tab[e]
sinon
si e est multiple de 2 (dans les cas ou faut faire une soustraction)
S = S - e
finsi
finsi
finPour
bon, on peut aussi se rappeler de ce qu'on a fait avant. Par exemple, si la fois d'avant tu as fait une soustraction, la fois d'apres tu fais une adition. ca rappele un peu une suite u_n = (-1)^n, que on peut appliquer la, mais lidée c'est d'avoir une variable qui sert de "mémoire" pour l'itération suivante dans la boucle.

Pour tous les Pairs e de 0 a 20 - 1
u_n = -u_n
S = S + tab[e]*u_n
finPour

Pour les entiers pairs, i suffit de prendre une boucle avec un pas d'increm 2, pis pour les alterner on peut choisir d'utiliser une "variable mémoire" (faut pas le répéter, c'est custom), qui permet de connaitre l'état d'avant.

Mais je saisis lorsque tu cherches des exos corrigés. Mais bon, jpense que la meilleure des corrections, c'est le compilateur et les résultats. Tant pis si c'est moche au début, a force ca devient moins moche!
Apres ya toujours le fait qu'on peut separer code et conception dalgo sur papier comme dit par abcd22, mais il faut tester pour valider et ca permet en plus de mieux retenir que de lire simplement la correction d'un exo.
la vie est une fête :)

Billball
Membre Complexe
Messages: 2669
Enregistré le: 31 Mar 2006, 19:13

par Billball » 13 Jan 2010, 11:10

pfiuuu, bah merci de vos aides.. ! heureusement que jmise pas dessus pour mon semestre ...

enfin dans la méme U.E il y a également géosciences et développement durable donc ca devrait passer! jvais revoir ca ce soir !

merci en attendant!

abcd22
Membre Complexe
Messages: 2426
Enregistré le: 13 Jan 2006, 14:36

par abcd22 » 13 Jan 2010, 19:09

fatal_error a écrit:...

Si la question est vraiment posée comme Billball l'a écrite, on peut se contenter de recopier la définition de S. Comme a priori on ne doit pas supporter un tableau de taille quelconque, je ne vois pas de raison de se compliquer la vie avec une boucle et des tests. Si la réponse attendue était celle que tu donnes, c'est que la question est mal posée.

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 13 Jan 2010, 19:22

ben elle est posée dans son contexte. Vu que ca sort d'un td d'algo, je pense qu'on attend plus que de simplement recopier S.

Par ailleurs, si la valeur avait été 100, même si recopier S est envisageable, ca refroidit pas mal d'y recopier...

edit : mais javoue que ca ferait pas mal sur une copie (un bon paragraphe plein :zen: )
la vie est une fête :)

Billball
Membre Complexe
Messages: 2669
Enregistré le: 31 Mar 2006, 19:13

par Billball » 15 Jan 2010, 02:30

motivé je vous copie mon sujet :

qtion de cours : expliquer cmt on déclare un tableau à 2D. expliquer par qqles lignes de codes cmt on peut afficher de manière correcte une matrice à 2D

exo1 : on considére un tableau tab de 100 entiers. ecrire le prog qui : déclare ce tableau, initialise ce tableau en lisant chaque nombre au clavier, affiche "ok" si au moins 0, un 1 et un 2 consécutifs ont été saisis, et "non ok" dans le cas contraire.

exo2 : on considére un tableau tab de 20 entiers que l'on suppose correctement initianilisé dans cette question. ecrire le prog qui compte et affiche le nombre de zéros du tableau tab

exo3 : on cosidére un entier p supérieur ou égal à 2 et Ip l'ensemble de ses diviseurs. Ecrire un prog qui calcule pour un nombre p quelconque, supérieur ou égal à 2, le cardinal (ou encore le nombre d'éléments) de Ip

exo4 : on considére un tableau tab de 20 entiers que l'on suppose correctement initianilisé dans cet exercice. ecrire un prog qui effectue un décalage d'un pas à "droite" de ce tableau à l'aide d'une instruction itérative(0 va en tab[0], tab[0] va en tab[1]...)

exo5: soit n un entier positif ou nul. écrire un prog qui à l'aide d'une instruction itérative, affiche le nombre de chiffres nécessaires pour la représentation de n en base de 10. par exemple si n = 103, le prog devra retourner 3 .... etc


c'était plutot un échec pour ma part mais bon tanpis !

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 15 Jan 2010, 16:22

re,

tu souhaites les reponses (ou) de l'aide ou c'était juste pour montrer le sujet?
la vie est une fête :)

Billball
Membre Complexe
Messages: 2669
Enregistré le: 31 Mar 2006, 19:13

par Billball » 15 Jan 2010, 16:39

euuh, ceeux de l'exo 3 et 5 m'intéresserait, car j'avais du mal déja à me donner une idée de ce qu'ils signifiaient !

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 15 Jan 2010, 16:57

exo3 : on cosidére un entier p supérieur ou égal à 2 et Ip l'ensemble de ses diviseurs. Ecrire un prog qui calcule pour un nombre p quelconque, supérieur ou égal à 2, le cardinal (ou encore le nombre d'éléments) de Ip


C'est pas optimisé, mais c'est pas demandé, donc c'est bon!
Code: Tout sélectionner
nbLp =0;//contient le nombre de diviseur de p
Pour i = 1; i =1
 myFloat = myFloat/10
 nbChiffres++;
fin tant que


Une autre facon, sans se taper de virgules, avec les modulos
Si n mod 10 = 0, alors soit n est divisible par 10 et vaut pas 0, soit n vaut 0.
Si n vaut 0 on sarrete de diviser, si n est divisble par 10, on divise par 10

Code: Tout sélectionner
myInt = n
nbChiffres = 0
tant que myInt != 0
 //myInt devient divisible par 10
 myInt = myInt - myInt mod 10
 //on divise par 10 vu que c'est un entier
 myInt = myInt / 10
 nbChiffres++;
fin tant que


moyennant les indices...
la vie est une fête :)

Billball
Membre Complexe
Messages: 2669
Enregistré le: 31 Mar 2006, 19:13

par Billball » 15 Jan 2010, 17:37

pour l'exo3 c'était surtout le point mathématique qui m'a bloqué donc j'ai fais un peu à l'instinct.

sinon pour le 5, soit j'ai mal lu, soit tu as mal saisi le pb : si tu veux, on prend un nombre, et on veut qu'il affiche le nombre derrière la virgule aprés l'avoir divisé par 10

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 15 Jan 2010, 18:04

sinon pour le 5, soit j'ai mal lu, soit tu as mal saisi le pb : si tu veux, on prend un nombre, et on veut qu'il affiche le nombre derrière la virgule aprés l'avoir divisé par 10


soit n un entier positif ou nul.

etant donné que n est un entier, n on peut lui foutre une virgule, ok
n,00000....
Mais ce qui nous intéresse c'est le nombre de chiffres que contient n.
On cherche l'ordre de n en puissance de 10.
Si tu peux diviser n par 1000 et que c'est supérieur a 1, ca veut dire que n vaut au moins 1000 et donc contient au moins 4 chiffres.
la vie est une fête :)

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite