Calcul du pgcd de deux nombres
Description : Cet exemple calcul le pgcd de deux nombres.
Aperçu :
L'utilisateur entre les deux nombres
Après avoir cliqué sur le bouton "Valider"
Commande de compilation : si on a appelé le fichier 'programme.c',
on compile le tout en tapant la commande :
gcc programme.c -o programme `pkg-config --cflags --libs gtk+-2.0`
(le signe " ` " s'obtient avec la combinaison des touches AltGr+7).
On exécute avec ./programme.c
Code source :
#include<stdio.h> #include<stdlib.h> #include<gtk/gtk.h> /* On cree une structure contenant les deux boites d'editions et le label Resultat. Ceci est necessaire pour pouvoir passer plusieurs objet en argument, lors de l'utilistation de la fonction g_signal_connect(). */ typedef struct{ GtkWidget *edit1; GtkWidget *edit2; GtkWidget *labelResultat; }Data; /* Fonction renvoyant le pgcd de deux entiers */ int pgcd(int nb1, int nb2) { int resultat, quotient; int reste=1; if (nb1>nb2) { while (reste!=0) { resultat=reste; quotient=nb1/nb2; reste = nb1 - nb2*quotient; printf("%d=%dx%d+%d\n",nb1,nb2,quotient,reste); nb1=nb2; nb2=reste; } } else { while (reste!=0) { resultat=reste; quotient=nb2/nb1; reste = nb2 - nb1*quotient; printf("%d=%dx%d+%d\n",nb2,nb1,quotient,reste); nb2=nb1; nb1=reste; } } return resultat; } /* Fonction affichant le resultat dans le label Resultat */ void afficher_resultat(GtkWidget *boutonCalculer, Data *data) { const gchar *texte1; const gchar *texte2; gchar *resultatTexte; gint nb1, nb2, resultat; texte1 = gtk_entry_get_text ( GTK_ENTRY(data->edit1) ); texte2 = gtk_entry_get_text ( GTK_ENTRY(data->edit2) ); /* on convertit les variables de types chaines en types entiers */ nb1 = atoi (texte1); nb2 = atoi (texte2); /* on calcul le resultat */ resultat = pgcd(nb1, nb2); resultatTexte = malloc( 100*sizeof(char) ); /* on convertit le resultat de type entier en type chaine pour pouvoir l'afficher dans un label */ sprintf(resultatTexte, "Resultat : pgcd(%d,%d)=%d", nb1, nb2, resultat); /* on affiche le resultat */ gtk_label_set_text( GTK_LABEL(data->labelResultat), resultatTexte); } /* PROGRAMME PRINCIPAL */ int main(int argc, char *argv[]) { /* Declaration des variables */ int nb1,nb2,resultat; Data data; GtkWidget *window; GtkWidget *table; // on cree une table pour placer les objets GtkWidget *label1; GtkWidget *label2; GtkWidget *boutonCalculer; /* Initialisation de la bibliotheque */ gtk_init (&argc, &argv); /* Creation des objets */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); table = gtk_table_new(4,2, FALSE); label1 = gtk_label_new("Entrer le premier nombre : "); data.edit1 = gtk_entry_new(); label2 = gtk_label_new("Entrer le deuxieme nombre : "); data.edit2 = gtk_entry_new(); data.labelResultat = gtk_label_new("Cliquer sur le bouton 'Valider' pour calculer le resultat du pgcd : "); boutonCalculer = gtk_button_new_with_label("Valider"); /* Attachement des objets a la table et a la fenetre principale*/ gtk_container_add( GTK_CONTAINER (window), table); gtk_table_attach( GTK_TABLE (table), label1, 0,1, 0,1, GTK_FILL, GTK_FILL, 10, 10); gtk_table_attach( GTK_TABLE (table), data.edit1, 1,2, 0,1, GTK_FILL, GTK_FILL, 10, 10); gtk_table_attach( GTK_TABLE (table), label2, 0,1, 1,2, GTK_FILL, GTK_FILL, 10, 10); gtk_table_attach( GTK_TABLE (table), data.edit2, 1,2, 1,2, GTK_FILL, GTK_FILL, 10, 10); gtk_table_attach( GTK_TABLE (table), data.labelResultat, 0,2, 2,3, GTK_EXPAND, GTK_EXPAND, 10, 10); gtk_table_attach( GTK_TABLE (table), boutonCalculer, 0,2, 3,4, GTK_FILL, GTK_FILL, 10, 10); /******* CONNEXION DES SIGNAUX *******/ /* Termine l'application lorsque l'on ferme la fenetre */ g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); /* Connexion du singnal du bouton Calculer */ g_signal_connect (G_OBJECT (boutonCalculer), "clicked", G_CALLBACK (afficher_resultat), (gpointer) &data); gtk_widget_show_all(window); gtk_main (); return 0; }