Пример #1
0
        /// <summary>
        /// Metodo per scrivere gli headers (xn, SAB, Cj).
        /// </summary>
        /// <param name="table">Tabella da cui prendere i dati.</param>
        /// <param name="dg">DataGridView in cui scrivere.</param>
        private static void writeHeaders(cTable table, DataGridView dg)
        {
            for (int i = 0; i < table.Functions.Length; i++) {
                int index = table.Functions[i].IndexOf('<');
                if(index < 0) index = table.Functions[i].IndexOf('>');
                if(index < 0) index = table.Functions[i].IndexOf('=');

                string tmp = table.Functions[i].Substring(0, index);
                string[] tmpArray = Regex.Split(tmp, @"(x\d{1,})");
                tmpArray = tmpArray.Where(x => !string.IsNullOrEmpty(x)).ToArray(); //<-- Cancella le celle vuote

                dg[0, i].Value = 0;
                dg[1, i].Value = tmpArray[tmpArray.Length - 1];
            }
            dg[1, table.Functions.Length].Value = "Cj"; //GTA San Andreas cit.
            dg[1, table.Functions.Length + 1].Value = "SAB";
        }
Пример #2
0
        void bAnalize_Click(object sender, EventArgs e)
        {
            //Ancora da commentare dato che il metodo può essere soggetto a modifiche
            /* Controlli all'interno della miniForm
             * exerciseName
             * cbMinMax
             * exerciseZ
             * exerciseFunctions
             * bClear
             * bAnalize
             * bClose
            */
            if (existsControl("button2") && existsControl("label1") && existsControl("button3")) {
                label1.Dispose();
                button2.Dispose();
                button3.Dispose();
            }

            //Controlla i coefficienti nella Z

            //Controlla i coefficienti nelle funzioni
            TextBox exerciseFunctions = getMiniTextBox("exerciseFunctions");
            exerciseFunctions.Lines = exerciseFunctions.Lines.Where(x => !string.IsNullOrEmpty(x)).ToArray(); //Elimina le linee vuote

            string[] functions = exerciseFunctions.Lines;
            exerciseFunctions.Clear();
            for (int i = 0; i < functions.Length; i++) {
                functions[i] = validNumbers(functions[i]);
                exerciseFunctions.Text += functions[i] + Environment.NewLine;
            }

            string errore;

            table = new cTable(
                getMiniTextBox("exerciseName").Text,            //Nome dell'esercizio
                validNumbers(getMiniTextBox("exerciseZ").Text), //Z dell'esercizio
                exerciseFunctions.Lines,                        //Funzioni dell'esercizio
                getMiniCombo("cbMinMax").SelectedText == "Problema di Massimo" ? "max" : "min",
                out errore                                      //Eventuali errori
            );
            if (errore != null) { MessageBox.Show(errore); return; }
            Tables.Add(table);

            //Se non c'è posiziona la Listbox
            if (!existsControl("lstExercises")) {
                placeListBox();
                oldSelected = table.exName;
            }
            else changeIndex(Tables.Count - 1);

            //rExpressions.Visible = label1.Visible = button1.Visible = txtZ.Visible = false;

            //Crea la tabella
            DataGridView dg;

            if (existsControl("dg")) this.Controls["dg"].Dispose();
            dg = writeDG(table);

            if (!existsControl("bNext")) {
                createControlsUnderDG(dg);
            }
            this.Controls["insertingWindow"].Dispose();
            this.Controls["background"].Dispose();
            this.ActiveControl = dg;
        }
Пример #3
0
        private void nuovoSistemaDaFileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult res = findFile.ShowDialog();
            if (res == DialogResult.OK || res == DialogResult.Yes) {
                string errore;
                table = new cTable(findFile.FileName, out errore);
                if (errore == "errore") {
                    table = Tables[(this.Controls["lstExercises"] as ListBox).SelectedIndex];
                    MessageBox.Show("Seleziona un file adatto a come scritto nella guida");
                }
                else {
                    if (errore != null) { MessageBox.Show(errore); return; }
                    Tables.Add(table);

                    if (existsControl("button2") && existsControl("label1") && existsControl("button3")) {
                        label1.Dispose();
                        button2.Dispose();
                        button3.Dispose();
                    }

                    //Se non c'è posiziona la Listbox
                    if (!existsControl("lstExercises")) {
                        placeListBox();
                        oldSelected = Tables[0].exName;
                    }
                    else changeIndex(Tables.Count - 1);

                    //rExpressions.Visible = label1.Visible = button1.Visible = txtZ.Visible = false;

                    //Crea la tabella
                    DataGridView dg;

                    if (existsControl("dg")) this.Controls["dg"].Dispose();
                    dg = writeDG(table);

                    if (!existsControl("bNext")) {
                        createControlsUnderDG(dg);
                    }
                    else {
                        this.Controls["bNext"].Enabled = true;
                        this.Controls["bEnd"].Enabled = true;
                        this.Controls["labelUscente"].Text = "";
                        this.Controls["labelEntrante"].Text = "";
                        this.Controls["labelFine"].Text = "";
                    }

                    if (existsControl("insertingWindow") && existsControl("background")) {
                        this.Controls["insertingWindow"].Dispose();
                        this.Controls["background"].Dispose();
                    }
                    this.ActiveControl = dg;

                }
            }
        }
Пример #4
0
 /// <summary>
 /// Metodo per scrivere la B. (Ultima colonna)
 /// </summary>
 /// <param name="t">Tabella da cui prendere i dati.</param>
 /// <param name="dg">DataGridView in cui scrivere.</param>
 private static void writeB(cTable t, DataGridView dg)
 {
     for (int r = 0; r < t.Vars.Count; r++) {
         dg[dg.Columns.Count - 1, r].Value = t.Vars[r][t.Vars[r].Length - 1];
     }
 }
Пример #5
0
        /// <summary>
        /// Metodo per la creazione del DataGridView.
        /// </summary>
        /// <param name="table">L'oggetto della tabella.</param>
        /// <returns></returns>
        private DataGridView createDataGrid(cTable table)
        {
            DataGridView dg = new DataGridView();
            dg.Name = "dg";
            dg.ReadOnly = true;
            dg.AllowUserToAddRows = false;
            dg.AllowUserToDeleteRows = false;
            dg.AllowUserToResizeColumns = false;
            dg.AllowUserToResizeRows = false;
            dg.Font = new Font("Calibri", 12, FontStyle.Regular);
            //CB, Base, Var decisionali + Var scarto, B
            int select = table.nVariabiliArtificiali == 0 ? table.nVariabiliScarto - 1 : table.nVariabiliArtificiali - 1;
            dg.ColumnCount = 3 + select;
            dg.RowCount = table.Functions.Length + 2;
            //le prime due non le conta, Columns.Count - 1; l'ultima non la conta
            for (int i = 2; i < dg.Columns.Count; i++) {
                for (int j = 0; j < dg.Rows.Count; j++) {
                    dg.Rows[j].Cells[i].Value = "0";
                }
            }
            for (int i = 0; i < dg.Columns.Count; i++) { dg.Columns[i].Width = 50; }

            Control relativePosition = this.Controls["lstExercises"];
            Size relativeSize = new Size(375, 100); //La grandezza della textbox delle funzioni
            dg.Location = new Point(relativePosition.Location.X + relativePosition.Width + 30, relativePosition.Height / 10);
            dg.Size = new Size(relativeSize.Width + 125, relativeSize.Height + 125);
            dg.Anchor = AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Left;
            dg.Columns[0].HeaderText = "Cb";
            dg.Columns[1].HeaderText = /* All your */"Base" /* are belong to us */;
            this.Controls.Add(dg);

            for (int i = 0; i < select; i++) {
                dg.Columns[i + 2].HeaderText = "x" + (i + 1);
            }
            dg.Columns[select + 2].HeaderText = "b";
            return dg;
        }
Пример #6
0
        /// <summary>
        /// Metodo per scrivere i numeri all'interno del datagridview.
        /// </summary>
        /// <param name="t">Tabella da cui prendere i dati.</param>
        /// <param name="dg">DataGridView in cui scrivere.</param>
        private void writeTableNumbers(cTable t, DataGridView dg)
        {
            for (int r = 0; r < t.Functions.Length; r++) {
                //t.nVars per far si che riempisse tutte le caselle delle var decisionali
                //+1 per riempire quella dello scarto
                string v = null;
                if (t.Functions[r].Contains(">=") || t.Functions[r].Contains("=") && !t.Functions[r].Contains("<")) {
                    int index = t.Functions[r].IndexOf('<');
                    if (index < 0) index = t.Functions[r].IndexOf('>');
                    if (index < 0) index = t.Functions[r].IndexOf('=');

                    string tmp = t.Functions[r].Substring(0, index);
                    string[] tmpArray = Regex.Split(tmp, @"(x\d{1,})");
                    tmpArray = tmpArray.Where(x => !string.IsNullOrEmpty(x)).ToArray(); //<-- Cancella le celle vuote
                    v = tmpArray[tmpArray.Length - 1];
                }
                for (int c = 0; c < t.nVariabili + 1; c++) {
                    if (c < t.nVariabili) {

                        dg[c + 2, r].Value = t.coefficientTerms[r][c];

                        //Scrittura Cj
                        dg[c + 2, dg.RowCount - 2].Value = t.ZArray[c];
                    }
                    else { //Ho scritto tutti i coefficienti
                        //Scritto la B

                        dg[c + 2 + r, r].Value = t.coefficientTerms[r][c];

                        //Scrittura M
                        if (v != null) {
                            int columnIndex = getColumnByHeader(dg, v);
                            dg[columnIndex, dg.RowCount - 2].Value = "-M";
                        }
                        //c + 2 per il fatto delle prime due da non contare
                        //+ r per contare a che funzione sono arrivato
                        //quindi per arrivare all'nesimo scarto

                    }
                }
                if (t.nVariabiliArtificiali > 0) {
                    for(int c = (t.nVariabiliArtificiali - t.nVariabili) + 2; c < dg.ColumnCount - 1; c++) {
                        if (t.Functions[r].Contains(">=") || t.Functions[r].Contains("=") && !t.Functions[r].Contains("<")) {
                            dg[c, r].Value = t.coefficientTerms[r][c - t.nVariabili - 1];
                        }
                        else break;
                    }
                }
            }
        }
Пример #7
0
 /// <summary>
 /// Metodo scritto per comodità per l'avvio di più metodi.
 /// </summary>
 /// <param name="table">L'oggetto della tabella.</param>
 /// <returns></returns>
 private DataGridView writeDG(cTable table)
 {
     this.table = table;
     DataGridView dg = createDataGrid(table);
     writeHeaders(table, dg);
     writeTableNumbers(table, dg);
     writeB(table, dg);
     writeCb(table, dg);
     writeSab(dg);
     return dg;
 }
Пример #8
0
 /// <summary>
 /// Metodo per scrivere le variabili di base.
 /// </summary>
 /// <param name="t">Tabella da cui prendere i dati.</param>
 /// <param name="dg"><DataGridView in cui scrivere.</param>
 private void writeCb(cTable t, DataGridView dg)
 {
     for (int r = 0; r < t.Functions.Length; r++) {
         string str = dg[1, r].Value.ToString();
         int column = getColumnByHeader(dg, str);
         int row = t.Functions.Length;
         dg[0, r].Value = dg[column, row].Value;
     }
 }