/* gMatESO - MCD y mcm */ #include #include "cabecera.h" #define G_ASCII_DTOSTR_BUF_SIZE (29 + 10) #include #define _(String) gettext (String) GtkWidget *ventana1; GtkWidget *vbox1, *hbox1, *hbox3; GtkWidget *label1, *label3, *label4, *label4b, *label4c, *label4d, *label4e, *label6, *labelb1, *labelb2; GtkWidget *hseparator1, *hseparator2, *hseparator3; GtkWidget *entry1, *entry2, *entry3, *entry4; GtkWidget *boton1, *boton2; GtkWidget *radioboton1, *radioboton2; GtkWidget *scrolled_window, *scrolled_window2; GtkWidget *canvas; GnomeCanvasGroup *root; GnomeCanvasPoints *points; GtkTextBuffer *bufer; GtkTextTagTable *tags; GtkTextTag *negrita, *color_rojo, *color_azul, *fuente_11, *fuente_12, *fuente_13, *superindice, *subrayado; GtkTextView *view; GtkTextIter start, end; gchar *numero1, *numero2, *numero3, *numero4; extern GArray *numeros; extern GArray *factores; extern GArray *bases1, *bases2, *bases3, *bases4; extern GArray *exponentes1, *exponentes2, *exponentes3, *exponentes4; extern GArray *primos; extern GArray *RBASES; extern GArray *REXPON; extern gint num_primos; extern gint num_bases; gboolean MCD = TRUE; gint num_numeros=0; gdouble Cx, Cy; void crea_ventana_principal () { ventana1 = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request (GTK_WIDGET (ventana1), 700, 540); gtk_window_set_title (GTK_WINDOW (ventana1), _("gMatESO - MCD y mcm")); gtk_window_set_resizable (GTK_WINDOW (ventana1), FALSE); g_signal_connect (G_OBJECT (ventana1), "delete_event", G_CALLBACK (exit), NULL); vbox1 = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (ventana1), vbox1); gtk_container_set_border_width(GTK_CONTAINER (vbox1), 5); label1 = gtk_label_new ("MCD y mcm"); gtk_box_pack_start (GTK_BOX (vbox1), label1, FALSE, FALSE, 1); gtk_widget_set_size_request(GTK_WIDGET (label1), 780, 30); gtk_label_set_markup (GTK_LABEL(label1), _(" MCD (Máximo Común Divisor) y mcm (mínimo común múltiplo) ")); /*weight='bold'*/ hseparator1 = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox1), hseparator1, FALSE, FALSE, 1); scrolled_window2 = gtk_scrolled_window_new (NULL, NULL); gtk_box_pack_start (GTK_BOX (vbox1), scrolled_window2, TRUE, TRUE, 1); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window2), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); tags = gtk_text_tag_table_new(); bufer = gtk_text_buffer_new(tags); view = GTK_TEXT_VIEW(gtk_text_view_new_with_buffer(bufer)); gtk_text_view_set_left_margin (view, 5); gtk_container_add (GTK_CONTAINER (scrolled_window2), GTK_WIDGET(view)); g_object_set(view, "wrap-mode", GTK_WRAP_WORD, NULL); negrita = gtk_text_buffer_create_tag(bufer, "negrita", "weight", 500, NULL); color_rojo = gtk_text_buffer_create_tag(bufer, "color_rojo", "foreground", "#ff0000", NULL); color_azul = gtk_text_buffer_create_tag(bufer, "color_azul", "foreground", "#0000ff", NULL); fuente_11 = gtk_text_buffer_create_tag(bufer, "fuente_11", "size", 11 * PANGO_SCALE, NULL); fuente_12 = gtk_text_buffer_create_tag(bufer, "fuente_12", "size", 12 * PANGO_SCALE, NULL); fuente_13 = gtk_text_buffer_create_tag(bufer, "fuente_13", "size", 13 * PANGO_SCALE, NULL); superindice = gtk_text_buffer_create_tag(bufer,"superindice", "rise", 4*PANGO_SCALE, NULL); subrayado = gtk_text_buffer_create_tag(bufer,"subrayado", "underline", PANGO_UNDERLINE_SINGLE, NULL); gtk_text_buffer_set_text(bufer, "", -1); gtk_text_buffer_get_selection_bounds (bufer, &start, &end); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("El"), -1, "fuente_11", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _(" Máximo Común Divisor "), -1, "negrita","color_rojo", "fuente_11", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("de varios números es el mayor de sus divisores comunes"), -1, "fuente_11", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\nEl"), -1, "fuente_11", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _(" mínimo común múltiplo "), -1, "negrita","color_rojo", "fuente_11", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("de varios números es el menor de sus múltiplos comunes"), -1, "fuente_11", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\n Para calcular el MCD:"),-1, "fuente_11", "subrayado", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\n - Escribimos cada número como producto de sus factores primos\n - Tomamos los factores "), -1, "fuente_11", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("comunes "), -1, "fuente_11", "negrita",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("elevados a los "), -1, "fuente_11", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("menores "), -1, "fuente_11", "negrita",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("exponentes."), -1, "fuente_11", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\n Para calcular el mcm:"),-1, "fuente_11", "subrayado", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\n - Escribimos cada número como producto de sus factores primos\n - Tomamos "), -1, "fuente_11", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("todos "), -1, "fuente_11", "negrita",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("los factores (comunes y no comunes) elevados a los "), -1, "fuente_11", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("mayores "), -1, "fuente_11", "negrita",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("exponentes."), -1, "fuente_11", NULL); gtk_text_view_set_editable (view, FALSE); hseparator2 = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox1), hseparator2, FALSE, FALSE, 1); hbox1 = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 1); label3 = gtk_label_new ("Ejemplo: "); gtk_label_set_markup (GTK_LABEL(label3),_("Ejemplo: ") ); gtk_box_pack_start (GTK_BOX (hbox1), label3, FALSE, FALSE, 1); radioboton1 = gtk_radio_button_new_with_label(NULL, "MCD"); gtk_box_pack_start (GTK_BOX (hbox1), radioboton1, FALSE, FALSE, 1); radioboton2 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON (radioboton1), "mcm"); gtk_box_pack_start (GTK_BOX (hbox1), radioboton2, FALSE, FALSE, 1); label4 = gtk_label_new (_(" M.C.D. (")); gtk_label_set_markup (GTK_LABEL(label4),_(" M.C.D. ( ") ); gtk_box_pack_start (GTK_BOX (hbox1), label4, FALSE, FALSE, 1); entry1 = gtk_entry_new_with_max_length (4); gtk_entry_set_width_chars(GTK_ENTRY(entry1), 4); gtk_box_pack_start (GTK_BOX (hbox1), entry1, FALSE, FALSE, 0); gtk_widget_grab_focus (entry1); label4b = gtk_label_new (","); gtk_label_set_markup (GTK_LABEL(label4b),", " ); gtk_box_pack_start (GTK_BOX (hbox1), label4b, FALSE, FALSE, 0); entry2 = gtk_entry_new_with_max_length (4); gtk_entry_set_width_chars(GTK_ENTRY(entry2), 4); gtk_box_pack_start (GTK_BOX (hbox1), entry2, FALSE, FALSE, 0); label4c = gtk_label_new (","); gtk_label_set_markup (GTK_LABEL(label4c),", " ); gtk_box_pack_start (GTK_BOX (hbox1), label4c, FALSE, FALSE, 0); entry3 = gtk_entry_new_with_max_length (4); gtk_entry_set_width_chars(GTK_ENTRY(entry3), 4); gtk_box_pack_start (GTK_BOX (hbox1), entry3, FALSE, FALSE, 0); label4d = gtk_label_new (","); gtk_label_set_markup (GTK_LABEL(label4d),", " ); gtk_box_pack_start (GTK_BOX (hbox1), label4d, FALSE, FALSE, 0); entry4 = gtk_entry_new_with_max_length (4); gtk_entry_set_width_chars(GTK_ENTRY(entry4), 4); gtk_box_pack_start (GTK_BOX (hbox1), entry4, FALSE, FALSE, 0); label4e = gtk_label_new (","); gtk_label_set_markup (GTK_LABEL(label4e),") = " ); gtk_box_pack_start (GTK_BOX (hbox1), label4e, FALSE, FALSE, 0); boton1 = gtk_button_new (); gtk_box_pack_start (GTK_BOX (hbox1), boton1, FALSE, FALSE, 10); labelb1=gtk_label_new(""); gtk_container_add (GTK_CONTAINER (boton1), labelb1); gtk_label_set_markup (GTK_LABEL(labelb1),_("Calcular")); gtk_widget_show (labelb1); boton2 = gtk_button_new (); gtk_box_pack_start (GTK_BOX (hbox1), boton2, FALSE, FALSE, 10); labelb2=gtk_label_new(""); gtk_container_add (GTK_CONTAINER (boton2), labelb2); gtk_label_set_markup (GTK_LABEL(labelb2),_("Terminar")); gtk_widget_show (labelb2); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_box_pack_start (GTK_BOX (vbox1), scrolled_window, TRUE, TRUE, 1); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); canvas = gnome_canvas_new_aa(); gtk_container_add(GTK_CONTAINER(scrolled_window), canvas); root = gnome_canvas_root(GNOME_CANVAS(canvas)); gnome_canvas_set_center_scroll_region (GNOME_CANVAS(canvas), FALSE); gnome_canvas_set_scroll_region (GNOME_CANVAS(canvas),0.0,0.0,655.0,500.0); gtk_widget_set_size_request(GTK_WIDGET (scrolled_window), -1, 210); hseparator3 = gtk_hseparator_new (); gtk_widget_show (hseparator3); gtk_box_pack_start (GTK_BOX (vbox1), hseparator3, FALSE, FALSE, 1); hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox3); gtk_box_pack_start (GTK_BOX (vbox1), hbox3, FALSE, FALSE, 1); label6 = gtk_label_new (_("AYUDA: Teclea al menos 2 números y pulsa 'CALCULAR'")); gtk_widget_show (label6); gtk_box_pack_start (GTK_BOX (hbox3), label6, FALSE, FALSE, 1); gchar *cadena_markup=_(" "); PangoAttrList *attrList; pango_parse_markup(cadena_markup, -1, 0, &attrList, NULL, NULL, NULL); gtk_label_set_attributes(GTK_LABEL(label6), attrList); GString *carpeta; gchar *texto; carpeta=g_string_new(NULL); g_string_append (carpeta, g_get_home_dir ()); g_string_append (carpeta, "/gmateso/estilos.rc"); texto = g_string_free (carpeta, FALSE); gtk_rc_parse(texto); gtk_widget_show_all (ventana1); gtk_widget_hide(boton2); return; } void conecta_senales () { gtk_signal_connect (GTK_OBJECT (boton1), "clicked", GTK_SIGNAL_FUNC (callback), NULL); gtk_signal_connect (GTK_OBJECT (boton2), "clicked", GTK_SIGNAL_FUNC (callback4), NULL); gtk_signal_connect (GTK_OBJECT (radioboton1), "toggled", GTK_SIGNAL_FUNC (callback2), NULL); gtk_signal_connect (GTK_OBJECT (radioboton2), "toggled", GTK_SIGNAL_FUNC (callback3), NULL); gtk_signal_connect (GTK_OBJECT (entry1), "insert_text", GTK_SIGNAL_FUNC (insert_text_handler1), NULL); gtk_signal_connect (GTK_OBJECT (entry2), "insert_text", GTK_SIGNAL_FUNC (insert_text_handler1), NULL); gtk_signal_connect (GTK_OBJECT (entry3), "insert_text", GTK_SIGNAL_FUNC (insert_text_handler1), NULL); gtk_signal_connect (GTK_OBJECT (entry4), "insert_text", GTK_SIGNAL_FUNC (insert_text_handler1), NULL); g_signal_connect ((gpointer) entry1, "key_press_event", G_CALLBACK (on_entry1_key_press_event), NULL); g_signal_connect ((gpointer) entry2, "key_press_event", G_CALLBACK (on_entry2_key_press_event), NULL); g_signal_connect ((gpointer) entry3, "key_press_event", G_CALLBACK (on_entry3_key_press_event), NULL); g_signal_connect ((gpointer) entry4, "key_press_event", G_CALLBACK (on_entry4_key_press_event), NULL); } void insert_text_handler1 (GtkEditable *editable, const gchar *text, gint length, gint *position, gpointer data) { int i; GString *result; gboolean SI; result = g_string_new(""); for (i = 0; i < length; i++) { SI = FALSE; if (g_ascii_isdigit (text[i])) SI=TRUE; if (SI) g_string_append_c(result, text[i]); } g_signal_handlers_block_by_func (editable, (gpointer) insert_text_handler1, data); if (SI) gtk_editable_insert_text (editable, result->str, length, position); g_signal_handlers_unblock_by_func (editable, (gpointer) insert_text_handler1, data); g_signal_stop_emission_by_name (editable, "insert_text"); g_string_free (result, TRUE); } gboolean on_entry1_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { if ((event->keyval == 0xFF0D)||(event->keyval == 0xFF8D)) gtk_widget_grab_focus (entry2); return FALSE; } gboolean on_entry2_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { if ((event->keyval == 0xFF0D)||(event->keyval == 0xFF8D)) gtk_widget_grab_focus (entry3); return FALSE; } gboolean on_entry3_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { if ((event->keyval == 0xFF0D)||(event->keyval == 0xFF8D)) gtk_widget_grab_focus (entry4); return FALSE; } gboolean on_entry4_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) { if ((event->keyval == 0xFF0D)||(event->keyval == 0xFF8D)) gtk_widget_grab_focus (boton1); return FALSE; } void muestra_error(gchar *mensaje) { GtkWidget *dialog; dialog = gtk_message_dialog_new (GTK_WINDOW (ventana1), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, mensaje); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } gboolean mira_numeros() { gboolean semaforo=TRUE; gint contador=0; numero1 = gtk_editable_get_chars(GTK_EDITABLE(entry1),0,-1); numero2 = gtk_editable_get_chars(GTK_EDITABLE(entry2),0,-1); numero3 = gtk_editable_get_chars(GTK_EDITABLE(entry3),0,-1); numero4 = gtk_editable_get_chars(GTK_EDITABLE(entry4),0,-1); gboolean alerta=FALSE; if (strlen(numero1)!=0) {if (g_ascii_strtod(numero1 ,NULL)<=1) { muestra_error(_(" Introduce números mayores que 1 ")); semaforo=FALSE; alerta=TRUE; } else contador++;} if (strlen(numero2)!=0) {if (g_ascii_strtod(numero2 ,NULL)<=1) { if (!alerta) muestra_error(_(" Introduce números mayores que 1 ")); semaforo=FALSE; alerta=TRUE; } else contador++;} if (strlen(numero3)!=0) {if (g_ascii_strtod(numero3 ,NULL)<=1) { if (!alerta) muestra_error(_(" Introduce números mayores que 1 ")); semaforo=FALSE; alerta=TRUE; } else contador++;} if (strlen(numero4)!=0) {if (g_ascii_strtod(numero4 ,NULL)<=1) { if (!alerta) muestra_error(_(" Introduce números mayores que 1 ")); semaforo=FALSE; alerta=TRUE; } else contador++;} if (contador<2) { semaforo=FALSE; if (!alerta) muestra_error(_(" Se necesitan al menos dos números \n para calcular MCM ó mcm ")); } else num_numeros=contador; return semaforo; } void avanza_scroll() { gtk_text_view_set_editable (view, FALSE); gtk_text_buffer_get_iter_at_offset( bufer, &start, -1 ); gtk_text_buffer_place_cursor( bufer, &start ); gtk_text_view_scroll_mark_onscreen (view, gtk_text_buffer_get_insert(bufer)); } void callback (GtkWidget *widget, gchar data) { gint num_int, num_temp; if (num_numeros>0) libera_arrays(num_numeros); if (mira_numeros()) { gtk_label_set_text (GTK_LABEL(label6), _("AYUDA: Pulsa sobre 'TERMINAR'")); crea_arrays(num_numeros); num_int=0; if (strlen(numero1)!=0) num_int = g_ascii_strtod(numero1 ,NULL); if (num_int>1) g_array_append_val (numeros, num_int); num_int=0; if (strlen(numero2)!=0) num_int = g_ascii_strtod(numero2 ,NULL); if (num_int>1) g_array_append_val (numeros, num_int); num_int=0; if (strlen(numero3)!=0) num_int = g_ascii_strtod(numero3 ,NULL); if (num_int>1) g_array_append_val (numeros, num_int); num_int=0; if (strlen(numero4)!=0) num_int = g_ascii_strtod(numero4 ,NULL); if (num_int>1) g_array_append_val (numeros, num_int); escribe_texto_y_graficos(); /* NUMERO 1º*/ num_temp=g_array_index(numeros, gint, 1); lista_primos (num_temp); llena_factores(num_temp); bases_exponentes(factores, bases1, exponentes1); escribe_textygraf(1); dibuja_factorizacion(num_temp, 30.0, 30.0); /* NUMERO 2º*/ num_temp=g_array_index(numeros, gint, 2); g_array_free (primos,TRUE); lista_primos (num_temp); g_array_free (factores,TRUE); llena_factores(num_temp); bases_exponentes(factores, bases2, exponentes2); escribe_textygraf(2); dibuja_factorizacion(num_temp, 180.0, 30.0); if (num_numeros>2) { num_temp=g_array_index(numeros, gint, 3); g_array_free (primos,TRUE); lista_primos (num_temp); g_array_free (factores,TRUE); llena_factores(num_temp); bases_exponentes(factores, bases3, exponentes3); escribe_textygraf(3); dibuja_factorizacion(num_temp, 330.0, 30.0); } if (num_numeros==4) { num_temp=g_array_index(numeros, gint, 4); g_array_free (primos,TRUE); lista_primos (num_temp); g_array_free (factores,TRUE); llena_factores(num_temp); bases_exponentes(factores, bases4, exponentes4); escribe_textygraf(4); dibuja_factorizacion(num_temp, 480.0, 30.0); } gtk_widget_hide(boton1); gtk_widget_show(boton2); gtk_entry_set_editable (GTK_ENTRY(entry1), FALSE); gtk_entry_set_editable (GTK_ENTRY(entry2), FALSE); gtk_entry_set_editable (GTK_ENTRY(entry3), FALSE); gtk_entry_set_editable (GTK_ENTRY(entry4), FALSE); gtk_widget_grab_focus(boton2); } } /* fin de calback*/ void callback2 (GtkWidget *widget, gchar data) /*MCM*/ { gtk_label_set_markup (GTK_LABEL(label4),_(" M.C.D. ( ") ); MCD = TRUE; } void callback3 (GtkWidget *widget, gchar data) /*mcmr*/ { gtk_label_set_markup (GTK_LABEL(label4),_(" m.c.m. ( " )); MCD = FALSE; } void callback4 (GtkWidget *widget, gchar data) { segundo_paso(); } void segundo_paso() { gint i,j,potencia; gdouble resultado=1.0; gchar *temporal; char buf[G_ASCII_DTOSTR_BUF_SIZE]; gtk_label_set_text (GTK_LABEL(label6),_("AYUDA: Teclea al menos 2 números y pulsa 'CALCULAR'")); if (MCD) { calculaMCD(); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\nBuscamos los factores "), -1, "fuente_12", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("comunes "), -1,"fuente_12","color_azul",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("que son: "), -1,"fuente_12",NULL); if (RBASES->len==1) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _(" no hay factores comunes"), -1, "fuente_12", "negrita", NULL); else for (i=1; ilen; i++) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(RBASES, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_12","negrita", NULL); if ((i+1)<(RBASES->len)) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " , ", -1, "fuente_12", NULL); } if (RBASES->len==1) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\nel MCD es 1"), -1, "fuente_12", "negrita", NULL); else { gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\nelevados a los "), -1,"fuente_12",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("menores"), -1,"fuente_12","color_azul",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _(" exponentes: "), -1,"fuente_12",NULL); } for (i=1; ilen; i++) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(RBASES, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_12","negrita", NULL); temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(REXPON, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal,-1,"fuente_11","superindice",NULL); if ((i+1)<(RBASES->len)) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " , ", -1, "fuente_12", NULL); } gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\nPor tanto: "), -1,"fuente_12",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("M.C.D.("), -1,"fuente_13",NULL); for (i=1; i<=num_numeros; i++) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(numeros, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_13", NULL); if (ilen; i++) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(RBASES, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_12","negrita", NULL); temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(REXPON, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal,-1,"fuente_11","superindice",NULL); if ((i+1)<(RBASES->len)) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " · ", -1, "fuente_13","negrita" ,NULL); } if (1len) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " = ", -1,"fuente_13",NULL); for (i=1; ilen; i++) { potencia=g_array_index(RBASES, gint, i); for (j=1; jlen)) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " · ", -1, "fuente_13","negrita" ,NULL); } if (1len) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " = ", -1,"fuente_13",NULL); temporal=g_ascii_dtostr(buf, sizeof(buf), resultado); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1,"fuente_13","negrita","color_azul",NULL); } if (MCD==FALSE) { calculamcm(); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\nTomamos "), -1, "fuente_12", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("todos"), -1,"fuente_12","color_azul",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _(" los factores (comunes y no comunes): "), -1,"fuente_12",NULL); for (i=1; ilen; i++) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(RBASES, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_12","negrita", NULL); if ((i+1)<(RBASES->len)) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " , ", -1, "fuente_12", NULL); } gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\nelevados a los "), -1,"fuente_12",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("mayores"), -1,"fuente_12","color_azul",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _(" exponentes: "), -1,"fuente_12",NULL); for (i=1; ilen; i++) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(RBASES, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_12","negrita", NULL); temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(REXPON, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start,temporal,-1,"fuente_11","superindice",NULL); if ((i+1)<(RBASES->len)) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " , ", -1, "fuente_12", NULL); } gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\nPor tanto: "), -1,"fuente_12",NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("m.c.m.("), -1,"fuente_13",NULL); for (i=1; i<=num_numeros; i++) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(numeros, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_13", NULL); if (ilen; i++) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(RBASES, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_12","negrita", NULL); temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(REXPON, gint, i)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start,temporal,-1,"fuente_11","superindice",NULL); if ((i+1)<(RBASES->len)) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " · ", -1, "fuente_13","negrita" ,NULL); } gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " = ", -1,"fuente_13",NULL); for (i=1; ilen; i++) { potencia=g_array_index(RBASES, gint, i); for (j=1; jlen)) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " · ", -1, "fuente_13","negrita" ,NULL); } gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " = ", -1,"fuente_13",NULL); temporal=g_ascii_dtostr(buf, sizeof(buf), resultado); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1,"fuente_13","negrita","color_azul",NULL); } avanza_scroll(); gtk_widget_show(boton1); gtk_widget_hide(boton2); /* poner editables los entryes */ gtk_entry_set_editable (GTK_ENTRY(entry1), TRUE); gtk_entry_set_editable (GTK_ENTRY(entry2), TRUE); gtk_entry_set_editable (GTK_ENTRY(entry3), TRUE); gtk_entry_set_editable (GTK_ENTRY(entry4), TRUE); } void escribe_texto_y_graficos() { gchar *temporal; char buf[G_ASCII_DTOSTR_BUF_SIZE]; gtk_text_view_set_editable (view, TRUE); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, "\n---------------------------------------------------------------------------\n", -1, "fuente_13","negrita", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\n***** Iniciamos el cáclculo de "), -1, "fuente_13", NULL); if (MCD) gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("M.C.D. ("), -1, "fuente_13","color_azul", NULL); else gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("m.c.m. ("), -1, "fuente_13", "color_azul",NULL); temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(numeros, gint, 1)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_13", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, ", ", -1, "fuente_13","color_azul", NULL); temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(numeros, gint, 2)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_13", NULL); if (num_numeros>2) { gtk_text_buffer_insert_with_tags_by_name (bufer, &start, ", ", -1, "fuente_13","color_azul", NULL); temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(numeros, gint, 3)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_13", NULL); } if (num_numeros==4) { gtk_text_buffer_insert_with_tags_by_name (bufer, &start, ", ", -1, "fuente_13","color_azul", NULL); temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(numeros, gint, 4)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_13", NULL); } gtk_text_buffer_insert_with_tags_by_name (bufer, &start, ")", -1, "fuente_13","color_azul", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " *****", -1, "fuente_13", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, _("\nEn primer lugar factorizamos cada uno de los números:\n"), -1, "fuente_12", NULL); avanza_scroll(); /*borrar el canvas con un rectángulo blanco*/ gnome_canvas_item_new(root, gnome_canvas_rect_get_type(), "x1", 0.0, /*cordenas de la */ "y1", 0.0, /*esquina sup-izq */ "x2", 700.0, /*ancho */ /*coord de la esquina inf-der*/ "y2", 2505.0, /*alto */ "fill_color_rgba", 0xffffffff, /*color de relleno*/ "outline_color_rgba", 0x000000ff, /*color del borde */ "width_units", 1.0, /*tamaño del borde*/ NULL); } void escribe_textygraf(gint n) { gchar *temporal; char buf[G_ASCII_DTOSTR_BUF_SIZE]; if (n>1) gtk_text_buffer_insert (bufer, &start, "\n", -1); temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(numeros, gint, n)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_13","negrita", NULL); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, " = ", -1, "fuente_13","negrita", NULL); gint j; for (j=1; j<=num_bases; j++) { switch (n) { case 1: temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(bases1, gint, j)); break; case 2: temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(bases2, gint, j)); break; case 3: temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(bases3, gint, j)); break; case 4: temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(bases4, gint, j)); break; } gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_13","negrita", NULL); switch (n) { case 1: if (g_array_index(exponentes1, gint, j)!=1) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(exponentes1, gint, j)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_12","superindice", NULL); } break; case 2: if (g_array_index(exponentes2, gint, j)!=1) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(exponentes2, gint, j)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_12","superindice", NULL); } break; case 3: if (g_array_index(exponentes3, gint, j)!=1) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(exponentes3, gint, j)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_12","superindice", NULL); } break; case 4: if (g_array_index(exponentes4, gint, j)!=1) { temporal=g_ascii_dtostr(buf, sizeof(buf), g_array_index(exponentes4, gint, j)); gtk_text_buffer_insert_with_tags_by_name (bufer, &start, temporal, -1, "fuente_12","superindice", NULL); } break; } if (jcoords[0] = Cx+60; points->coords[1] = Cy-20; points->coords[2] = Cx+60; points->coords[3] = Cy+20; gnome_canvas_item_new(root, gnome_canvas_line_get_type(), "points", points, "fill_color_rgba", 0x000000ff, "width_units", 2.0, NULL); gnome_canvas_points_unref(points); } void dibuja_dividendo(gint numero) { gchar *texto ; GString *cadena; gchar *temporal; char buf[G_ASCII_DTOSTR_BUF_SIZE]; cadena=g_string_new(NULL); temporal=g_ascii_dtostr(buf, sizeof(buf), numero); g_string_append(cadena, temporal); switch (num_digitos(numero)) { case 1:g_string_prepend (cadena," "); break; case 2:g_string_prepend (cadena," "); break; case 3:g_string_prepend (cadena," "); break; case 4:g_string_prepend (cadena," "); break; } texto = g_string_free (cadena, FALSE); /* escribir el texto en el canvas */ gnome_canvas_item_new(root, gnome_canvas_text_get_type(), "size-points", 14.0, "markup", texto, "fill_color", "black", "x", Cx, "y", Cy, "anchor", GTK_ANCHOR_WEST, NULL); } void dibuja_factorizacion(gint numero, gdouble x, gdouble y) { gboolean primeravez=TRUE; gint k=1, dividendo, i; dividendo=numero; Cx=x; Cy=y; dibuja_raya(); while (dividendo!=1) { for (i=k; i<=num_primos; i++) if (dividendo==g_array_index(primos, gint, i)) { k=i; break; } if (dividendo%g_array_index(primos, gint, k)==0) { if (primeravez) dibuja_dividendo(dividendo); primeravez=FALSE; dibuja_divisor(g_array_index(primos, gint, k)); /*baja_linea*/ Cx=x; Cy=Cy+25.0; dibuja_dividendo(dividendo/g_array_index(primos, gint, k)); dibuja_raya(); dividendo=dividendo/g_array_index(primos, gint, k); } else { if (primeravez) dibuja_dividendo(dividendo); primeravez=FALSE; k++; } } }