Changeset 61e2bc2 in mmcs for mainwindow.C
- Timestamp:
- Jul 26, 2016, 10:17:16 AM (8 years ago)
- Branches:
- master
- Children:
- 588814f
- Parents:
- 4d3d740
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
mainwindow.C
r4d3d740 r61e2bc2 944 944 945 945 QTableWidget *tw = findChild<QTableWidget *>("TablaPrincipal"); 946 TotalPrincipalTable(tw,PrincipalTable,2); 946 947 bool iguales = true; 947 948 CalcularTotales(tw,2,iguales);//Se llama a la funcion que agregue una nueva fila y columna con los totales respectivos … … 965 966 QMessageBox::warning(this,"Alerta","Debe llenar correctamente y agregar todas las cuentas"); 966 967 } 968 } 969 } 970 971 /* 972 Función que almacena los valores de la tabla principal en una matriz 973 Autor: Rodrigo Boet 974 Fecha: 21/06/2016 975 @param <QTableWidget> *tw -> Recibe como parametro una widget de tabla de qt 976 */ 977 void MainWindow::TotalPrincipalTable(QTableWidget *tw,MatrixXd &Matriz,int init) 978 { 979 int cantidad=tw->rowCount(); 980 Matriz.resize(cantidad-1,cantidad-1); 981 for(int i=init;i<cantidad;i++) 982 { 983 double totalFila = 0; 984 double totalColumna = 0; 985 for(int j=init;j<cantidad;j++) 986 { 987 QString itemf=Separador(tw->item(i,j),true); 988 double thisFila=itemf.toDouble(); 989 QString itemc=Separador(tw->item(j,i),true); 990 double thisCol=itemc.toDouble(); 991 Matriz(i-init,j-init) = thisFila; 992 Matriz(j-init,i-init) = thisCol; 993 totalFila += Matriz(i-init,j-init); 994 totalColumna += Matriz(j-init,i-init); 995 } 996 Matriz(i-init,cantidad-init) = totalFila; 997 Matriz(cantidad-init,i-init) = totalColumna; 998 967 999 } 968 1000 } … … 1023 1055 Valor->setFlags(Valor->flags() ^ Qt::ItemIsEditable); 1024 1056 tableWidget->setItem(filas,columnas,Valor); 1025 //1026 1057 int cantidad = tableWidget->rowCount(); 1027 1058 ItemsNoEditable(tableWidget,0,inicio-1,cantidad-1); … … 1151 1182 void MainWindow::CalcularAn(QTableWidget *tw,QTableWidget *nuevaTabla,QTableWidget *tablaOriginal,int count,bool endogena)//Funcion para calcular el Coeficiente Tecnico Horizontal (An) 1152 1183 { 1184 if(endogena) 1185 { 1186 An.resize(count-3,count-3); 1187 } 1153 1188 for(int i=0;i<count-1;i++) 1154 1189 { … … 1168 1203 else 1169 1204 { 1170 value = Separador(tw->item(count-1,i),true); 1171 value = QString::number(value.toDouble(),'f',precission); 1172 total=value.toDouble(); 1205 total = PrincipalTable(count-3,i-2); 1173 1206 } 1174 QString values = Separador(tw->item(j,i),true); 1175 values = QString::number(values.toDouble(),'f',precission); 1176 double valor=values.toDouble(); 1207 double valor=PrincipalTable(j-2,i-2); 1177 1208 if(total==0)//Se comprueba en caso de que el total sea zero 1178 1209 { … … 1190 1221 ValoraInsertar->setTextAlignment(Qt::AlignCenter); 1191 1222 nuevaTabla->setItem(j,i,ValoraInsertar); 1223 if(endogena) 1224 { 1225 An(j-2,i-2) = valor; 1226 } 1192 1227 } 1193 1228 /**** En este else se llenan las celdas con fila y columna 0, es decir las que tienen nombre *****/ … … 1532 1567 for(int i=0;i<count-1;i++) 1533 1568 { 1534 QString STotal = Separador(tw->item(i,count-1),true);1535 double total =STotal.toDouble();//Se obtiene el total de esa columna1569 //Se obtiene el total de esa columna 1570 double total = PrincipalTable(i,count-3); 1536 1571 for(int j=0;j<count-1;j++) 1537 1572 { 1538 1573 if(i!=0 && j!=0) 1539 1574 { 1540 QString value = Separador(tw->item(i,j),true); 1541 double valor=value.toDouble(); 1575 double valor = PrincipalTable(i-1,j-1); 1542 1576 if(total==0)//Se comprueba en caso de que el total sea zero 1543 1577 { … … 1551 1585 ValoraInsertar->setFlags(ValoraInsertar->flags() ^ Qt::ItemIsEditable); 1552 1586 ValoraInsertar->setTextAlignment(Qt::AlignCenter); 1553 value = Separador(ValoraInsertar,false);1587 QString value = Separador(ValoraInsertar,false); 1554 1588 ValoraInsertar->setText(value); 1555 1589 CT_HorizontalTW->setItem(i,j,ValoraInsertar); … … 1762 1796 if(i>=2 && j>=2) 1763 1797 { 1764 QString value = Separador(tablaPPAL->item(i,j),true);1765 double valor= value.toDouble();1798 QString value; 1799 double valor=PrincipalTable(i-2,j-2); 1766 1800 QTableWidgetItem *ValoraInsertar = new QTableWidgetItem(QString::number(valor,'f',precission)); 1767 1801 value = Separador(ValoraInsertar,false); … … 1791 1825 QTableWidgetItem *ValoraInsertar = new QTableWidgetItem; 1792 1826 ValoraInsertar->setFlags(ValoraInsertar->flags() ^ Qt::ItemIsEditable); 1827 ValoraInsertar->setTextAlignment(Qt::AlignCenter); 1793 1828 tablaEE->setItem(i,j,ValoraInsertar); 1794 1829 } … … 1796 1831 } 1797 1832 } 1798 1799 1833 /*** Se acomodan los componentes de las cuentas exogenas ***/ 1800 1834 int cantidad = tablaEE->rowCount()-elementos; … … 1859 1893 CalcularTotales(matrizEndogena,2,var); 1860 1894 1895 TotalPrincipalTable(tablaEE,EndogenasyExogenas,2); 1861 1896 CalcularTotales(tablaEE,2,var); 1862 1897 setEndogenaExogenaCell(tablaEE,inicioExogena,elementos,true); … … 1972 2007 spanEndogenaCell(tablaAn,2,0,false);//Se juntan los espacios de las cuentas 1973 2008 tabWidget->removeTab(indice); 1974 crearMatrizEndogena(tablaAn);1975 2009 } 1976 2010 … … 1981 2015 } 1982 2016 1983 1984 void MainWindow::loadMatrizExogena()1985 {1986 1987 }1988 2017 1989 2018 /*** Funcion para retornar todos los componentes en una lista ***/ … … 2109 2138 } 2110 2139 2111 /* Funcion que crea la matriz endogena-endogena */2112 void MainWindow::crearMatrizEndogena(QTableWidget *tw)2113 {2114 int cantidad=tw->rowCount();2115 MatrixXd ident = MatrixXd::Identity(cantidad-1,cantidad-1);2116 MatrizEndogenaEndogena = ident;2117 for(int i=0;i<cantidad;i++)2118 {2119 for(int j=0;j<cantidad;j++)2120 {2121 if(i>=2 && j>=2)2122 {2123 double valor=tw->item(i,j)->text().toDouble();2124 MatrizEndogenaEndogena(i-2,j-2) = valor;2125 }2126 2127 }2128 }2129 }2130 2131 2140 /* Funcion que determina los Multiplicadores de Leontief */ 2132 2141 void MainWindow::restarIdentidadAn(QTableWidget *tw) … … 2139 2148 for(int j=0;j<cantidad-1;j++) 2140 2149 { 2141 A(i,j) = ident(i,j)- MatrizEndogenaEndogena(i,j);2150 A(i,j) = ident(i,j)-An(i,j); 2142 2151 } 2143 2152 } … … 2419 2428 QString cuenta = tw->item(i,1)->text(); 2420 2429 QString value = Separador(tw->item(i,cantidad-1),true); 2421 double total = value.toDouble();2422 2430 if(totalCuentas.contains(cuenta)) 2423 2431 { 2424 totalCuentas[cuenta] += total;2432 totalCuentas[cuenta] += EndogenasyExogenas(i-3,cantidad-4); 2425 2433 } 2426 2434 else 2427 2435 { 2428 totalCuentas.insert(cuenta, total);2436 totalCuentas.insert(cuenta,EndogenasyExogenas(i-3,cantidad-4)); 2429 2437 } 2430 2438 } … … 3638 3646 3639 3647 crearMatrizExgEnd(MatrizEndogenaExogena,MatrizExgEnd,elementos,inicioExogena); 3648 TotalEndoExoTable(elementos,inicioExogena); 3640 3649 calcularMatrizExgEnd(MatrizExgEnd); 3641 3650 ctvMatrizExgEnd(MatrizExgEnd,Bn); … … 3680 3689 } 3681 3690 3691 /* 3692 Función que almacena los valores del fragmento exogeno/endogeno la tabla Tipo de variables 3693 Autor: Rodrigo Boet 3694 Fecha: 22/06/2016 3695 @param <int> elementos -> Recibe como párametro la cantidad de elemntos que tiene esa sección 3696 @param <int> cantidad -> Recibe como parametro el inicio de del fragmento exogeno/endogeno 3697 */ 3698 void MainWindow::TotalEndoExoTable(int elementos, int cantidad) 3699 { 3700 ExoEndo.resize(elementos,cantidad-3); 3701 for(int i = 0;i<elementos;i++) 3702 { 3703 for(int j=0;j<cantidad-3;j++) 3704 { 3705 int value = (cantidad-3)+i; 3706 ExoEndo(i,j) = EndogenasyExogenas(value,j); 3707 } 3708 } 3709 } 3710 3682 3711 /* Funcion para calcular los totales de la matriz Exógena-Endógena */ 3683 3712 void MainWindow::calcularMatrizExgEnd(QTableWidget *MatrizExgEnd) … … 3709 3738 int fila = MatrizExgEnd->rowCount()-1; 3710 3739 int columna = MatrizExgEnd->columnCount(); 3740 MBn.resize(fila-2,columna-2); 3711 3741 QTableWidget *tw = findChild<QTableWidget *>("TablaPrincipal"); 3712 3742 int totalLocal = tw->rowCount()-1; 3713 3743 for(int i = 0; i<columna; i++) 3714 3744 { 3715 3716 QString value;3717 3745 double total; 3718 3746 for(int j = 0;j<fila;j++) … … 3720 3748 if(i>=2 and j>=2) 3721 3749 { 3722 value = Separador(tw->item(totalLocal,i),true); 3723 total = value.toDouble(); 3750 total = PrincipalTable(totalLocal-2,i-2); 3724 3751 double valoraInsertar; 3725 3752 if(total==0) … … 3729 3756 else 3730 3757 { 3731 QString valor = Separador(MatrizExgEnd->item(j,i),true); 3732 valoraInsertar = valor.toDouble(); 3758 valoraInsertar = ExoEndo(j-2,i-2); 3733 3759 valoraInsertar /= total; 3734 3760 } 3761 MBn(j-2,i-2) = valoraInsertar; 3735 3762 QTableWidgetItem *item = new QTableWidgetItem(QString::number(valoraInsertar,'f',precission)); 3736 3763 QString value = Separador(item,false); … … 3824 3851 int fila = Bn->rowCount(); 3825 3852 int columna = Bn->columnCount(); 3826 QTableWidget *Ma = findChild<QTableWidget *>("MatrizMa"); 3827 int count = Ma->rowCount(); 3828 MatrixXd Mbn(fila-2,columna-2); 3829 MatrixXd Mma(count-2,count-2); 3830 for(int i=2;i<columna;i++) 3831 { 3832 for(int j=2;j<fila;j++) 3833 { 3834 QString valueb = Separador(Bn->item(j,i),true); 3835 double doubleb = valueb.toDouble(); 3836 Mbn(j-2,i-2) = doubleb; 3837 } 3838 } 3839 for(int i=2;i<count;i++) 3840 { 3841 for(int j=2;j<count;j++) 3842 { 3843 QString valuem = Separador(Ma->item(i,j),true); 3844 double doublem = valuem.toDouble(); 3845 Mma(i-2,j-2) = doublem; 3846 } 3847 } 3848 MatrixMb = Mbn*Mma; 3853 MatrixMb = MBn*MatrixMa; 3849 3854 for(int i=0;i<columna;i++) 3850 3855 {
Note: See TracChangeset
for help on using the changeset viewer.