none
Erro "An unhandled exception of type 'System.StackOverflowException'" RRS feed

  • Pergunta

  • Meu programa estava compilando normalmente sem nenhum erro. Depois fiz algumas modificações como acrescentar novas variáveis, isso fora do int main. E então o programa esta dando este erro: An unhandled exception of type 'System.StackOverflowException' occurred in Combinacoes_ultimas.exe. 

    Não sei solucionar isso, e gostaria de uma ajuda.

    Meu programa, o programa para na linha 62:

    #include<iostream>
    #include <fstream>
    #include <sstream>
    #include <string>
    #include <cmath>

    using namespace std;

    struct resultado{
    double soma1[10000];
    double soma2[10000];
    double valor1;
    double valor2;
    double combinacao;
    };

    struct solicitacao{
    char esforco[100];
    char unidade[20];
    double carga_permanente;
    double carga_variavel;
    double yq;
    double fator;
    resultado Yg;
    resultado r;
    };

    struct celula1{
    solicitacao conteudo1;
    celula1 *seg1;
    };

    struct celula2{
    solicitacao conteudo2;
    celula2 *seg2;
    };

    struct celula3{
    solicitacao conteudo3;
    celula3 *seg3;
    };

    void Esforco(char nome[], celula3 *lst3);
    double stringToDouble(string s);
    solicitacao Buscar_coeficiente_G(int num);
    solicitacao Buscar_coeficiente_Q(int num);
    double buscar_fator(int n);
    void Insere_carga_permanente(double F, solicitacao y, celula1 *lst1);
    void Insere_carga_variavel(double F, solicitacao y, celula2 *lst2);
    void Insere_combinacoes(double F, celula3 *lst3);
    void Grava_PERMANENTES(celula1 *lst1);
    void Grava_VARIAVEL(celula2 *lst2);
    solicitacao Soma(celula1 *lst1);
    void Combinacoes(celula1 *lst1, celula2 *lst2, celula3 *lst3);
    void Imprimir_Combinacoes(celula3 *lst);

    int main(){
    celula1 c1; //Cria o no cabeça
    celula1 *lst1; //Cria um ponteiro para o cabeca
    c1.seg1 = NULL; //Lista vazinha
    lst1 = &c1;  //Ponteiro aponta para o cabeca, sempre
    celula2 c2; //Cria o no cabeça
    celula2 *lst2; //Cria um ponteiro para o cabeca
    c2.seg2 = NULL; //Lista vazinha
    lst2 = &c2;  //Ponteiro aponta para o cabeca, sempre
    celula3 c3; //Cria o no cabeça
    celula3 *lst3; //Cria um ponteiro para o cabeca
    c3.seg3 = NULL; //Lista vazinha
    lst3 = &c3;  //Ponteiro aponta para o cabeca, sempre
    char E[100];
    int num1, num2;
    double Fg, Fq;
    cout << "COMBINACOES ULTIMAS NORMAIS DE SOLICITACOES\n\n";
    while (1){
    cout << "Forneca o tipo de esforco:";
    cin >> E;
    Esforco(E, lst3);
    cout << "\n\nCARGAS PERMANENTES\n\n";
    while (1){
    cout << "\tTIPO DE ACAO SOLICITANTE:\n\t\t1-Peso proprio de estruturas metalicas;\n\t\t2-Peso proprio de estruturas pre-moldadas;";
    cout << "\n\t\t3-Peso proprio de estruturas moldadas no local e de elementos construtivos industrializados e empuxos permanentes;";
    cout << "\n\t\t4-Peso proprio de elementos construtivos industrializados com adicoes in loco;";
    cout << "\n\t\t5-Peso proprio de elementos construtivos em geral e equipamentos;";
    cout << "\n\t\t6-Acoes permanentes indiretas;\n\t\t7-Sair\n";
    cin >> num1;
    if (num1 == 7){
    break;
    }
    if (num1 == 1){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    if (num1 == 2){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    if (num1 == 3){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    if (num1 == 4){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    if (num1 == 5){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    if (num1 == 6){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    }
    int n;
    cout << "\n\nCARGAS VARIAVEL\n\n:";
    while (1){
    cout << "\tTIPO DE ACAO SOLICITANTE:\n";
    cout << "\t\t1-Efeito da temperatura;\n";
    cout << "\t\t2-Acao do vento;\n";
    cout << "\t\t3-Acoes truncadas;\n";
    cout << "\t\t4-Demais acoes variaveis, incluindo as decorrentes do uso e ocupacao;";
    cout << "\t\t5-Sair.\n";
    cin >> num2;
    if (num2 == 5){
    break;
    }
    if (num2 == 1){
    solicitacao y = Buscar_coeficiente_Q(num2);
    y.fator = 0.6;
    cout << "\n\t\t\tCarga:";
    cin >> Fq;
    Insere_carga_variavel(Fq, y, lst2);
    }
    if (num2 == 2){
    solicitacao y = Buscar_coeficiente_Q(num2);
    y.fator = 0.6;
    cout << "\n\t\t\tCarga:";
    cin >> Fq;
    Insere_carga_variavel(Fq, y, lst2);
    }
    if (num2 == 3){
    solicitacao y = Buscar_coeficiente_Q(num2);
    while (1){
    cout << "\nTipo de acao para determinar o fator de combinacao:\n";
    cout << "\n1-Locais em que nao ha predominancia de pesos e de equipamentos que permanecem fixos por longos periodos de tempo, nem de elevadas concentracoes de pessoas;";
    cout << "\n2-Locais em que ha predominancia de pesos e de equipamentos que permanecem fixos por longos periodos de tempo, ou de elevadas concentracoes de pessoas;";
    cout << "\n3-Bibliotecas, arquivos, depositos, oficinas e garagens e sobrecargas em coberturas;";
    cout << "\n4-Passarelas de pedestres;";
    cout << "\n5-Vigas de rolamneto de pontes rolante;";
    cout << "\n6-Pilares e outros elementos ou subestruturas que suportam vigas de rolamento de pontes rolantes;";
    cin >> n;
    y.fator = buscar_fator(n);
    break;
    }
    cout << "\n\t\t\tCarga:";
    cin >> Fq;
    }
    if (num2 == 4){
    solicitacao y = Buscar_coeficiente_Q(num2);
    while (1){
    cout << "\nTipo de acao para determinar o fator de combinacao:\n";
    cout << "\n1-Locais em que nao ha predominancia de pesos e de equipamentos que permanecem fixos por longos periodos de tempo, nem de elevadas concentracoes de pessoas;";
    cout << "\n2-Locais em que ha predominancia de pesos e de equipamentos que permanecem fixos por longos periodos de tempo, ou de elevadas concentracoes de pessoas;";
    cout << "\n3-Bibliotecas, arquivos, depositos, oficinas e garagens e sobrecargas em coberturas;";
    cout << "\n4-Passarelas de pedestres;";
    cout << "\n5-Vigas de rolamneto de pontes rolante;";
    cout << "\n6-Pilares e outros elementos ou subestruturas que suportam vigas de rolamento de pontes rolantes;";
    cin >> n;
    y.fator = buscar_fator(n);
    break;
    }
    cout << "\n\t\t\tCarga:";
    cin >> Fq;
    Insere_carga_variavel(Fq, y, lst2);
    }
    }
    Grava_PERMANENTES(lst1);
    Grava_VARIAVEL(lst2);
    Combinacoes(lst1, lst2, lst3);
    Imprimir_Combinacoes(lst3);
    system("pause");
    return 0;
    }
    }

    void Esforco(char nome[], celula3 *lst3){
    celula3 *nova;
    nova = new celula3;
    if (strcmp(nome, "Momento") == 0){
    strcpy(nova->conteudo3.esforco, nome);
    strcpy(nova->conteudo3.unidade, "kNm");
    nova->seg3 = lst3->seg3;
    lst3->seg3 = nova;
    }
    else{
    strcpy(nova->conteudo3.esforco, nome);
    strcpy(nova->conteudo3.unidade, "kN");
    nova->seg3 = lst3->seg3;
    lst3->seg3 = nova;
    }
    }

    double stringToDouble(string s) {
    // double myDouble = stod(s);
    // return myDouble;

    std::istringstream iss(s);
    double myDouble;
    iss >> myDouble;
    return myDouble;
    }

    solicitacao Buscar_coeficiente_G(int num){
    string line;
    string parte[100];
    int i = 1;
    solicitacao r;
    ifstream myfile("example.txt");
    if (myfile.is_open()){
    while (getline(myfile, line)){
    parte[i] = line;
    i++;
    }
    myfile.close();
    }
    r.Yg.valor1 = stringToDouble(parte[num]);
    r.Yg.valor2 = 1.00;
    cout << "\nOs coeficientes desta solicitacao: " << r.Yg.valor1 << " (" << r.Yg.valor2 << ")";
    return r;
    }

    solicitacao Buscar_coeficiente_Q(int num){
    string line;
    string parte[100];
    int i = 1;
    solicitacao r;
    ifstream myfile("example1.txt");
    if (myfile.is_open()){
    while (getline(myfile, line)){
    parte[i] = line;
    i++;
    }
    myfile.close();
    }
    r.yq = stringToDouble(parte[num]);
    cout << "\nOs coeficientes desta solicitacao: " << r.yq;
    return r;
    }

    double buscar_fator(int n){
    string line;
    string parte[100];
    int i = 1;
    double r;
    ifstream myfile("fator.txt");
    if (myfile.is_open()){
    while (getline(myfile, line)){
    parte[i] = line;
    i++;
    }
    myfile.close();
    }
    r = stringToDouble(parte[n]);
    cout << "\nO fator desta solicitacao: " << r;
    return r;
    }

    void Insere_carga_permanente(double F, solicitacao y, celula1 *lst1){
    celula1 *nova;
    nova = new celula1;
    nova->conteudo1.carga_permanente = F;
    nova->conteudo1.Yg.valor1 = y.Yg.valor1;
    nova->conteudo1.Yg.valor2 = y.Yg.valor2;
    nova->seg1 = lst1->seg1;
    lst1->seg1 = nova;
    }

    void Insere_carga_variavel(double F, solicitacao y, celula2 *lst2){
    celula2 *nova;
    nova = new celula2;
    nova->conteudo2.carga_variavel = F;
    nova->conteudo2.yq = y.yq;
    nova->conteudo2.fator = y.fator;
    nova->seg2 = lst2->seg2;
    lst2->seg2 = nova;
    }

    void Insere_combinacoes(double F, celula3 *lst3){
    celula3 *nova;
    nova = new celula3;
    nova->conteudo3.r.combinacao = F;
    nova->seg3 = lst3->seg3;
    lst3->seg3 = nova;
    }

    void Grava_PERMANENTES(celula1 *lst1){
    celula1 *p;
    ofstream myfile("carga_permanente.txt");
    for (p = lst1->seg1; p != NULL; p = p->seg1){
    myfile << p->conteudo1.carga_permanente << ": " << p->conteudo1.Yg.valor1 << "; " << p->conteudo1.Yg.valor2 << "\n";
    }
    myfile.close();
    }

    void Grava_VARIAVEL(celula2 *lst2){
    celula2 *p;
    ofstream myfile("carga_variavel.txt");
    for (p = lst2->seg2; p != NULL; p = p->seg2){
    myfile << p->conteudo2.carga_variavel << ": " << p->conteudo2.yq << "\n";
    }
    myfile.close();
    }

    solicitacao Soma(celula1 *lst1){
    celula1 *p;
    solicitacao r;
    double sol1[100];
    double sol2[100];
    int c = 0;
    for (p = lst1->seg1; p != NULL; p = p->seg1){
    sol1[c] = (p->conteudo1.carga_permanente)*(p->conteudo1.Yg.valor1);
    sol2[c] = (p->conteudo1.carga_permanente)*(p->conteudo1.Yg.valor2);
    c++;
    }
    for (int i = 0; i < c; i++){
    r.r.soma1[i] = sol1[i];
    for (int j = 0; j < c; j++){
    if (j == i){
    r.r.soma1[i] = r.r.soma1[i];
    }
    else{
    r.r.soma1[i] = r.r.soma1[i] + sol1[j];
    }
    }
    }
    for (int i = 0; i < c; i++){
    r.r.soma1[i] = sol2[i];
    for (int j = 0; j < c; j++){
    if (j == i){
    r.r.soma2[i] = r.r.soma2[i];
    }
    else{
    r.r.soma2[i] = r.r.soma2[i] + sol1[j];
    }
    }
    }
    return r;
    }

    void Combinacoes(celula1 *lst1, celula2 *lst2, celula3 *lst3){
    celula2 *q;
    double sol[100];
    double f[100];
    double d;
    solicitacao c = Soma(lst1);
    resultado s;
    int cont = 0;
    for (q = lst2->seg2; q != NULL; q = q->seg2){
    sol[cont] = (q->conteudo2.carga_variavel)*(q->conteudo2.yq);
    cout << "\n" << sol[cont] << "\n";
    f[cont] = q->conteudo2.fator;
    cont++;
    }
    for (int i = 0; i < cont; i++){
    s.combinacao = c.r.soma1[i] + sol[i];
    for (int t = 0; t < cont; t++){
    if (t != i){
    s.combinacao = s.combinacao + sol[t] * f[t];
    }
    else{
    s.combinacao = s.combinacao;
    }
    }
    d = s.combinacao;
    Insere_combinacoes(d, lst3);
    }
    for (int i = 0; i < cont; i++){
    s.combinacao = c.r.soma2[i] + sol[i];
    for (int t = 0; t < cont; t++){
    if (t != i){
    s.combinacao = s.combinacao + sol[t] * f[t];
    }
    else{
    s.combinacao = s.combinacao;
    }
    }
    d = s.combinacao;
    Insere_combinacoes(d, lst3);
    }
    for (int i = 0; i < cont; i++){
    s.combinacao = c.r.soma1[i] + sol[i];
    d = s.combinacao;
    Insere_combinacoes(d, lst3);
    }
    for (int i = 0; i < cont; i++){
    s.combinacao = c.r.soma2[i] + sol[i];
    d = s.combinacao;
    Insere_combinacoes(d, lst3);
    }
    }

    void Imprimir_Combinacoes(celula3 *lst3){
    celula3 *p;
    int cont = 0;
    double v[1000];
    double mx, mn;
    mn = 0;
    cout << "\n\nCOMBINACAO\n\n";
    ofstream myfile("combinacao.txt");
    for (p = lst3->seg3; p != NULL; p = p->seg3){
    cout << p->conteudo3.r.combinacao << " " << p->conteudo3.unidade << "\n";
    myfile << p->conteudo3.r.combinacao << " " << p->conteudo3.unidade << "\n";
    cont++;
    }
    for (int a = 0; a<cont; a++){
    mn = v[a];
    if (v[a]>mx){
    mx = v[a];
    }
    else if (v[a]<0){
    mn = v[a];
    }
    }
    cout << "A solicitacao atuante:" << mx << " " << p->conteudo3.unidade << "; " << mn;
    myfile.close();
    }

    segunda-feira, 14 de abril de 2014 00:53

Todas as Respostas

  • Olá,

    Por favor reposte o código usando o botão Inserir bloco de código do editor do fórum, e indique a linha que está dando erro colocando-a em negrito.

    Assim poderemos lhe ajudar melhor...


    Herbert Lausmann

    segunda-feira, 14 de abril de 2014 09:37
  • #include<iostream>
    #include <fstream>
    #include <sstream>
    #include <string>
    #include <cmath>
    
    using namespace std;
    
    struct resultado{
    double soma1[10000];
    double soma2[10000];
    double valor1;
    double valor2;
    double combinacao;
    };
    
    struct solicitacao{
    char esforco[100];
    char unidade[20];
    double carga_permanente;
    double carga_variavel;
    double yq;
    double fator;
    resultado Yg;
    resultado r;
    };
    
    struct celula1{
    solicitacao conteudo1;
    celula1 *seg1;
    };
    
    struct celula2{
    solicitacao conteudo2;
    celula2 *seg2;
    };
    
    struct celula3{
    solicitacao conteudo3;
    celula3 *seg3;
    };
    
    void Esforco(char nome[], celula3 *lst3);
    double stringToDouble(string s);
    solicitacao Buscar_coeficiente_G(int num);
    solicitacao Buscar_coeficiente_Q(int num);
    double buscar_fator(int n);
    void Insere_carga_permanente(double F, solicitacao y, celula1 *lst1);
    void Insere_carga_variavel(double F, solicitacao y, celula2 *lst2);
    void Insere_combinacoes(double F, celula3 *lst3);
    void Grava_PERMANENTES(celula1 *lst1);
    void Grava_VARIAVEL(celula2 *lst2);
    solicitacao Soma(celula1 *lst1);
    void Combinacoes(celula1 *lst1, celula2 *lst2, celula3 *lst3);
    void Imprimir_Combinacoes(celula3 *lst);
    
    int main(){
    celula1 c1; 
    celula1 *lst1; 
    c1.seg1 = NULL; //PROGRAMA PARA AQUI
    lst1 = &c1;  
    celula2 c2; 
    celula2 *lst2; 
    c2.seg2 = NULL; 
    lst2 = &c2;  
    celula3 c3; 
    celula3 *lst3; 
    c3.seg3 = NULL; 
    lst3 = &c3; 
    char E[100];
    int num1, num2;
    double Fg, Fq;
    cout << "COMBINACOES ULTIMAS NORMAIS DE SOLICITACOES\n\n";
    while (1){
    cout << "Forneca o tipo de esforco:";
    cin >> E;
    Esforco(E, lst3);
    cout << "\n\nCARGAS PERMANENTES\n\n";
    while (1){
    cout << "\tTIPO DE ACAO SOLICITANTE:\n\t\t1-Peso proprio de estruturas metalicas;\n\t\t2-Peso proprio de estruturas pre-moldadas;";
    cout << "\n\t\t3-Peso proprio de estruturas moldadas no local e de elementos construtivos industrializados e empuxos permanentes;";
    cout << "\n\t\t4-Peso proprio de elementos construtivos industrializados com adicoes in loco;";
    cout << "\n\t\t5-Peso proprio de elementos construtivos em geral e equipamentos;";
    cout << "\n\t\t6-Acoes permanentes indiretas;\n\t\t7-Sair\n";
    cin >> num1;
    if (num1 == 7){
    break;
    }
    if (num1 == 1){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    if (num1 == 2){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    if (num1 == 3){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    if (num1 == 4){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    if (num1 == 5){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    if (num1 == 6){
    solicitacao y = Buscar_coeficiente_G(num1);
    cout << "\n\t\t\tCarga:";
    cin >> Fg;
    Insere_carga_permanente(Fg, y, lst1);
    }
    }
    int n;
    cout << "\n\nCARGAS VARIAVEL\n\n:";
    while (1){
    cout << "\tTIPO DE ACAO SOLICITANTE:\n";
    cout << "\t\t1-Efeito da temperatura;\n";
    cout << "\t\t2-Acao do vento;\n";
    cout << "\t\t3-Acoes truncadas;\n";
    cout << "\t\t4-Demais acoes variaveis, incluindo as decorrentes do uso e ocupacao;";
    cout << "\t\t5-Sair.\n";
    cin >> num2;
    if (num2 == 5){
    break;
    }
    if (num2 == 1){
    solicitacao y = Buscar_coeficiente_Q(num2);
    y.fator = 0.6;
    cout << "\n\t\t\tCarga:";
    cin >> Fq;
    Insere_carga_variavel(Fq, y, lst2);
    }
    if (num2 == 2){
    solicitacao y = Buscar_coeficiente_Q(num2);
    y.fator = 0.6;
    cout << "\n\t\t\tCarga:";
    cin >> Fq;
    Insere_carga_variavel(Fq, y, lst2);
    }
    if (num2 == 3){
    solicitacao y = Buscar_coeficiente_Q(num2);
    while (1){
    cout << "\nTipo de acao para determinar o fator de combinacao:\n";
    cout << "\n1-Locais em que nao ha predominancia de pesos e de equipamentos que permanecem fixos por longos periodos de tempo, nem de elevadas concentracoes de pessoas;";
    cout << "\n2-Locais em que ha predominancia de pesos e de equipamentos que permanecem fixos por longos periodos de tempo, ou de elevadas concentracoes de pessoas;";
    cout << "\n3-Bibliotecas, arquivos, depositos, oficinas e garagens e sobrecargas em coberturas;";
    cout << "\n4-Passarelas de pedestres;";
    cout << "\n5-Vigas de rolamneto de pontes rolante;";
    cout << "\n6-Pilares e outros elementos ou subestruturas que suportam vigas de rolamento de pontes rolantes;";
    cin >> n;
    y.fator = buscar_fator(n);
    break;
    }
    cout << "\n\t\t\tCarga:";
    cin >> Fq;
    }
    if (num2 == 4){
    solicitacao y = Buscar_coeficiente_Q(num2);
    while (1){
    cout << "\nTipo de acao para determinar o fator de combinacao:\n";
    cout << "\n1-Locais em que nao ha predominancia de pesos e de equipamentos que permanecem fixos por longos periodos de tempo, nem de elevadas concentracoes de pessoas;";
    cout << "\n2-Locais em que ha predominancia de pesos e de equipamentos que permanecem fixos por longos periodos de tempo, ou de elevadas concentracoes de pessoas;";
    cout << "\n3-Bibliotecas, arquivos, depositos, oficinas e garagens e sobrecargas em coberturas;";
    cout << "\n4-Passarelas de pedestres;";
    cout << "\n5-Vigas de rolamneto de pontes rolante;";
    cout << "\n6-Pilares e outros elementos ou subestruturas que suportam vigas de rolamento de pontes rolantes;";
    cin >> n;
    y.fator = buscar_fator(n);
    break;
    }
    cout << "\n\t\t\tCarga:";
    cin >> Fq;
    Insere_carga_variavel(Fq, y, lst2);
    }
    }
    Grava_PERMANENTES(lst1);
    Grava_VARIAVEL(lst2);
    Combinacoes(lst1, lst2, lst3);
    Imprimir_Combinacoes(lst3);
    system("pause");
    return 0;
    }
    }
    
    void Esforco(char nome[], celula3 *lst3){
    celula3 *nova;
    nova = new celula3;
    if (strcmp(nome, "Momento") == 0){
    strcpy(nova->conteudo3.esforco, nome);
    strcpy(nova->conteudo3.unidade, "kNm");
    nova->seg3 = lst3->seg3;
    lst3->seg3 = nova;
    }
    else{
    strcpy(nova->conteudo3.esforco, nome);
    strcpy(nova->conteudo3.unidade, "kN");
    nova->seg3 = lst3->seg3;
    lst3->seg3 = nova;
    }
    }
    
    double stringToDouble(string s) {
    // double myDouble = stod(s);
    // return myDouble;
    
    std::istringstream iss(s);
    double myDouble;
    iss >> myDouble;
    return myDouble;
    }
    
    solicitacao Buscar_coeficiente_G(int num){
    string line;
    string parte[100];
    int i = 1;
    solicitacao r;
    ifstream myfile("example.txt");
    if (myfile.is_open()){
    while (getline(myfile, line)){
    parte[i] = line;
    i++;
    }
    myfile.close();
    }
    r.Yg.valor1 = stringToDouble(parte[num]);
    r.Yg.valor2 = 1.00;
    cout << "\nOs coeficientes desta solicitacao: " << r.Yg.valor1 << " (" << r.Yg.valor2 << ")";
    return r;
    }
    
    solicitacao Buscar_coeficiente_Q(int num){
    string line;
    string parte[100];
    int i = 1;
    solicitacao r;
    ifstream myfile("example1.txt");
    if (myfile.is_open()){
    while (getline(myfile, line)){
    parte[i] = line;
    i++;
    }
    myfile.close();
    }
    r.yq = stringToDouble(parte[num]);
    cout << "\nOs coeficientes desta solicitacao: " << r.yq;
    return r;
    }
    
    double buscar_fator(int n){
    string line;
    string parte[100];
    int i = 1;
    double r;
    ifstream myfile("fator.txt");
    if (myfile.is_open()){
    while (getline(myfile, line)){
    parte[i] = line;
    i++;
    }
    myfile.close();
    }
    r = stringToDouble(parte[n]);
    cout << "\nO fator desta solicitacao: " << r;
    return r;
    }
    
    void Insere_carga_permanente(double F, solicitacao y, celula1 *lst1){
    celula1 *nova;
    nova = new celula1;
    nova->conteudo1.carga_permanente = F;
    nova->conteudo1.Yg.valor1 = y.Yg.valor1;
    nova->conteudo1.Yg.valor2 = y.Yg.valor2;
    nova->seg1 = lst1->seg1;
    lst1->seg1 = nova;
    }
    
    void Insere_carga_variavel(double F, solicitacao y, celula2 *lst2){
    celula2 *nova;
    nova = new celula2;
    nova->conteudo2.carga_variavel = F;
    nova->conteudo2.yq = y.yq;
    nova->conteudo2.fator = y.fator;
    nova->seg2 = lst2->seg2;
    lst2->seg2 = nova;
    }
    
    void Insere_combinacoes(double F, celula3 *lst3){
    celula3 *nova;
    nova = new celula3;
    nova->conteudo3.r.combinacao = F;
    nova->seg3 = lst3->seg3;
    lst3->seg3 = nova;
    }
    
    void Grava_PERMANENTES(celula1 *lst1){
    celula1 *p;
    ofstream myfile("carga_permanente.txt");
    for (p = lst1->seg1; p != NULL; p = p->seg1){
    myfile << p->conteudo1.carga_permanente << ": " << p->conteudo1.Yg.valor1 << "; " << p->conteudo1.Yg.valor2 << "\n";
    }
    myfile.close();
    }
    
    void Grava_VARIAVEL(celula2 *lst2){
    celula2 *p;
    ofstream myfile("carga_variavel.txt");
    for (p = lst2->seg2; p != NULL; p = p->seg2){
    myfile << p->conteudo2.carga_variavel << ": " << p->conteudo2.yq << "\n";
    }
    myfile.close();
    }
    
    solicitacao Soma(celula1 *lst1){
    celula1 *p;
    solicitacao r;
    double sol1[100];
    double sol2[100];
    int c = 0;
    for (p = lst1->seg1; p != NULL; p = p->seg1){
    sol1[c] = (p->conteudo1.carga_permanente)*(p->conteudo1.Yg.valor1);
    sol2[c] = (p->conteudo1.carga_permanente)*(p->conteudo1.Yg.valor2);
    c++;
    }
    for (int i = 0; i < c; i++){
    r.r.soma1[i] = sol1[i];
    for (int j = 0; j < c; j++){
    if (j == i){
    r.r.soma1[i] = r.r.soma1[i];
    }
    else{
    r.r.soma1[i] = r.r.soma1[i] + sol1[j];
    }
    }
    }
    for (int i = 0; i < c; i++){
    r.r.soma1[i] = sol2[i];
    for (int j = 0; j < c; j++){
    if (j == i){
    r.r.soma2[i] = r.r.soma2[i];
    }
    else{
    r.r.soma2[i] = r.r.soma2[i] + sol1[j];
    }
    }
    }
    return r;
    }
    
    void Combinacoes(celula1 *lst1, celula2 *lst2, celula3 *lst3){
    celula2 *q;
    double sol[100];
    double f[100];
    double d;
    solicitacao c = Soma(lst1);
    resultado s;
    int cont = 0;
    for (q = lst2->seg2; q != NULL; q = q->seg2){
    sol[cont] = (q->conteudo2.carga_variavel)*(q->conteudo2.yq);
    cout << "\n" << sol[cont] << "\n";
    f[cont] = q->conteudo2.fator;
    cont++;
    }
    for (int i = 0; i < cont; i++){
    s.combinacao = c.r.soma1[i] + sol[i];
    for (int t = 0; t < cont; t++){
    if (t != i){
    s.combinacao = s.combinacao + sol[t] * f[t];
    }
    else{
    s.combinacao = s.combinacao;
    }
    }
    d = s.combinacao;
    Insere_combinacoes(d, lst3);
    }
    for (int i = 0; i < cont; i++){
    s.combinacao = c.r.soma2[i] + sol[i];
    for (int t = 0; t < cont; t++){
    if (t != i){
    s.combinacao = s.combinacao + sol[t] * f[t];
    }
    else{
    s.combinacao = s.combinacao;
    }
    }
    d = s.combinacao;
    Insere_combinacoes(d, lst3);
    }
    for (int i = 0; i < cont; i++){
    s.combinacao = c.r.soma1[i] + sol[i];
    d = s.combinacao;
    Insere_combinacoes(d, lst3);
    }
    for (int i = 0; i < cont; i++){
    s.combinacao = c.r.soma2[i] + sol[i];
    d = s.combinacao;
    Insere_combinacoes(d, lst3);
    }
    }
    
    void Imprimir_Combinacoes(celula3 *lst3){
    celula3 *p;
    int cont = 0;
    double v[1000];
    double mx, mn;
    mn = 0;
    cout << "\n\nCOMBINACAO\n\n";
    ofstream myfile("combinacao.txt");
    for (p = lst3->seg3; p != NULL; p = p->seg3){
    cout << p->conteudo3.r.combinacao << " " << p->conteudo3.unidade << "\n";
    myfile << p->conteudo3.r.combinacao << " " << p->conteudo3.unidade << "\n";
    cont++;
    }
    for (int a = 0; a<cont; a++){
    mn = v[a];
    if (v[a]>mx){
    mx = v[a];
    }
    else if (v[a]<0){
    mn = v[a];
    }
    }
    cout << "A solicitacao atuante:" << mx << " " << p->conteudo3.unidade << "; " << mn;
    myfile.close();
    }

    segunda-feira, 14 de abril de 2014 15:59