Posez votre question Signaler

Fonction/pointeur/langage c [Résolu]

steflemaister 19Messages postés lundi 11 août 2008Date d'inscription 27 décembre 2008 Dernière intervention - Dernière réponse le 30 août 2008 à 16:00
Bonjour,
Je dois repasser le cours d'info, ma question de juin était de transformer un nombre donné en seconde dans 1 format plus parlant, sous entendu (heure,minute,seconde)
Mon cours est pas très poussé, il faut maitriser la notion de pointeur et de fonction, et donc absolument utiliser ces deux notions ds le programme
#include<stdio.h>
void h_m_s(int nb;int *heure;int *min;int *sec )
main()
{
int s,m,h,nb;
printf("entrer le nbre de seconde:\n");
scanf("%d",&nombre);
h_m_s(nombre;&h;&m;&s )
printf("%d = %d heure %d minute %d seconde",nombre,h,m,s);
}
void h_m_s(int nb;int *heure;int *min;int *sec )
{
int tmp;
*heure=nb/3600;
tmp=nb%3600;
*min=tmp/60;
*sec=tmp%60
}
Ce programme est il juste? je gère pas bien les return, ai je besoin d un return(0) dans mon main?
Le type void de ma fonction est bien juste, n est ce pas?
Du fait que je ne gère pas du tout les return, y aurait il moyen de faire une fonction, avec return (h,m,s), si oui comment, merci de méclairer
Amicalement Steve
Lire la suite 
Réponse
+0
moins plus
dans le main, juste après le scanf, je mettrai bien un while(nombre<=0);
afin qu il me redemande chaque fois si j introduit un nombre négatif...

Merci de me lire
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,


void h_m_s(int nb;int *heure;int *min;int *sec ) 

La déclaration courte de la fonction h_m_s doit être terminée par un ;


Les types et les paramètres dans les déclarations ou définitions de fonctions doivent être séparés par des virgules et non des point-virgules.

Je suis d'accord sur le principe du post précédent, bien-que je préférerais dans ce cas saisir un nombre positif et vérifier que la saisie a été correcte :

unsigned int nb;

while ( scanf( "%u", &nb ) != 1 )
{
    printf( .......
}



Certains compilateurs sont pénible avec ce point mais la fonction main devrait avoir un type de retour spécifié. De préférence un int. A partir de là, le main peut renvoyer un code d'erreur. Petite convention, le succès est exprimé par la valeur 0 et tous les autres nombres servent à préciser une erreur.

Dans le scanf, la variable nombre n'existe pas.

Dans le printf il conviendrait de mettre un 's' à "seconde". Remarque similaire dans l'autre printf... ^^"

Un dernier point qui est correct mais peut être fait "mieux". On chipotte là !
Dans h_m_s, la variable locale tmp est inutile, le paramètre nb est déjà une copie de la valeur passée en paramètre. On peut donc changer directement sa valeur au cours de notre fonction sans danger et sans passer par une variable supplémentaire.

Les return ne permettent que de renvoyer qu'une seule valeur, ta fonction h_m_s est donc toute indiquée pour donner plusieurs valeurs à la fois. Les alternatives sont de faire trois fonctions h, m et s (avec de meilleurs nom si possible) ou de faire une structure si tu as déjà vu. Une structure permet de grouper plusieurs valeurs dans une seule entité. on fait ensuite : mesValeurs.h, mesValeurs.m et mesValeurs.s. Le passage par pointeur reste le meilleur à mon goût.
Le type void est donc bien selon moi.

M.
Ajouter un commentaire
Réponse
+0
moins plus
un grand merci,

Donc je résume mes erreurs : -oubli du point virgule après ma première déclaration
- dans cette même déclaration, virgule et non point virgule (faute d inatention sur ce coup la ;)
-ok pour le tmp, je vois bien ce que tu veux dire
-pour etre sur, mettre en return(0) avant la fin de main? ainsi si j 'ai bien compris, si mon programme est correct, il ira jusqu au return 0 donc succès! On travaille en c++!

Sinon avec ce prof on a pas vu les structures! J ai bien vu les arbres, fiches, structures avec un autre prof, mais rien avoir avec cet examen la!


Un tout grand merci de m 'avoir lu!


ps: tu seras encore là tantot, j aurai surment besoin de ton aide :) Sur ce je retourne potasser, bonne journée
Ajouter un commentaire
Réponse
+0
moins plus
en fait, je dois mettre ds mon scanf betement nb au lieu de nombre, j espère que je serai plus attentif à l exam ;)
Ajouter un commentaire
Réponse
+0
moins plus
bonjour,
je m'étais amusé compiler ton programme, et du coup quelqu'un t'as (bien) répondu avant moi.
Mais je rajoute ma sauce : Je te conseille de tester la compilation (et l'exécution) de ton programme avant de remettre ton exercice. Personne n'a un compilateur dans la tête.
Ceci m'a permis de voir, qu'en plus des erreurs que mahmah a vues, il en existe d'autres (un autre point virgule manquant à la fin, et des point virgulesà remplacer par des virgules sur trois lignes différentes)

Pour cela j'ai utilisé gcc que tu peux télécharger gratuitement (chercher le site MinGW.org).
Tu dis que c'est du C++, mais en fait ce code est du C pur et dur, même s'il la syntaxe est compatible C++.

Remarque s'ajoutant à celles de mahmah : mets de commentaires (pertinents) dans tes programmes. en environnement industriel, c'est capital, et je pense qu'un prof ne peut que l'apprécier.
En cadeau, le code garanti compilable sous gcc
#include <stdio.h>
/*
Programme en langage C mettant en oeuvre le oncept de fonction et le concept de pointeur
Ce programme a été compilé en utilisant gcc 3.4.5
Fait à partir de la version originale de steffemaister
*/
/********************************************************
* DECLARATIONS
********************************************************/
void h_m_s(int nb,int *heure,int *min,int *sec );

/********************************************************
* PROGRAMME PRINCIPAL
*******************************************************/
int main()
{
// Variables locales
int s,m,h,nombre;

// rajouter ici un test de nombre > 0 ou caner un unsigned selon remarque
printf("entrer le nbre de secondes :\n");
scanf("%d",&nombre);

// Appel de la méthode en passant les variables heure, minutes et secondes par pointeur
// De façon à récupérer la valeur modifiée
h_m_s(nombre,&h,&m,&s);


printf("%d = %d heure %d minutes %d secondes",nombre,h,m,s);
return 0;
}
/********************************************************
* FONCTION de conversion de nombre de secondes en h,m,s
* Description :
* Implémentation de la fonction qui convertit un nombre
* de secondes en heure, minutes, secondes
*******************************************************/
//
void h_m_s(int nb,int *heure,int *min,int *sec )
{
int tmp;
*heure=nb/3600;
tmp=nb%3600;
*min=tmp/60;
*sec=tmp%60;
}
Ajouter un commentaire
Ce document intitulé «  fonction/pointeur/langage c  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.