Esempio n. 1
0
No* preencheGrafo(No* G){
    FILE *fp;
    char cidade_org[20], cidade_dest[20];
    int distancia;
    No* aux;
    aux=(No*)malloc(sizeof(No));

    fp=fopen("EDT.txt","r");

    while(!feof(fp)){
        fscanf(fp, "%s", &cidade_org);
        fscanf(fp, "%s", &cidade_dest);
        fscanf(fp, "%d", &distancia);


        if(procuraCidade(G, cidade_org)==false){
            G=adicionaNo(G, cidade_org);
        }

        if(procuraCidade(G, cidade_dest)==false){
            G=adicionaNo(G, cidade_dest);
        }
    }
    fclose(fp);
    return G;
}
void Circuito::leNetlist(char* nomeArquivo)
{
    int i;
    char c;
    double cbe, cbc;
    Indutor *l1 = 0;
    Indutor *l2 = 0;
    std::ifstream fin(nomeArquivo);
    std::string nome;
    std::string no[4];
    double valor[4];
    if (fin.is_open())
    {
        getline(fin, nome); //pula primeira linha
        Elemento* elemento;
        bool sair = false;
        while(/*(getline(fin, linha)*/ fin >> nome)
        {
            elemento = 0;
            switch (nome[0])
            {
                case 'R':
                    fin >> no[0] >> no[1] >> valor[0];
                    elemento = new Resistor(nome, adicionaNo(no[0]), adicionaNo(no[1]), valor[0]);
                    break;
                case 'L':
                    fin >> no[0] >> no[1] >> valor[0];
                    elemento = new Indutor(nome, adicionaNo(no[0]), adicionaNo(no[1]), adicionaInc("j" + nome), valor[0]);
                    break;
                case 'K':
                    fin >> no[0] >> no[1] >> valor[0];
                    for(i = 0; i < listaElementos.size(); i++)
                    {
                        if (no[0] == listaElementos[i]->getNome())
                            l1 = (Indutor*)(listaElementos[i]);
                        if (no[1] == listaElementos[i]->getNome())
                            l2 = (Indutor*)(listaElementos[i]);
                    }
                    elemento = new IndutanciaMutua(l1->getNome() + l2->getNome(), l1, l2, valor[0]);
                    break;
                case 'C':
                    fin >> no[0] >> no[1] >> valor[0];
                    elemento = new Capacitor(nome, adicionaNo(no[0]), adicionaNo(no[1]), valor[0]);
                    break;
                case 'E':
                    fin >> no[0] >> no[1] >> no[2] >> no[3] >> valor[0];
                    elemento = new AmpDeTensao(nome, adicionaNo(no[0]), adicionaNo(no[1]), adicionaNo(no[2]), adicionaNo(no[3]), adicionaInc("j" + nome), valor[0]);
                    break;
                case 'F':
                    fin >> no[0] >> no[1] >> no[2] >> no[3] >> valor[0];
                    elemento = new AmpDeCorrente(nome, adicionaNo(no[0]), adicionaNo(no[1]), adicionaNo(no[2]), adicionaNo(no[3]), adicionaInc("j" + nome), valor[0]);
                    break;
                case 'G':
                    fin >> no[0] >> no[1] >> no[2] >> no[3] >> valor[0];
                    elemento = new Transcondutor(nome, adicionaNo(no[0]), adicionaNo(no[1]), adicionaNo(no[2]), adicionaNo(no[3]), valor[0]);
                    break;
                case 'H':
                    fin >> no[0] >> no[1] >> no[2] >> no[3] >> valor[0];
                    elemento = new Transresistor(nome, adicionaNo(no[0]), adicionaNo(no[1]), adicionaNo(no[2]), adicionaNo(no[3]), adicionaInc("jx" + nome), adicionaInc("jy" + nome), valor[0]);
                    break;
                case 'I':
                    fin >> no[0] >> no[1] >> valor[0] >> valor[1];
                    elemento = new FonteCorrente(nome, adicionaNo(no[0]), adicionaNo(no[1]), valor[0], valor[1]);
                    break;
                case 'V':
                    fin >> no[0] >> no[1] >> valor[0] >> valor[1];
                    elemento = new FonteTensao(nome, adicionaNo(no[0]), adicionaNo(no[1]), adicionaInc("j" + nome), valor[0], valor[1]);
                    break;
                case 'O':
                    fin >> no[0] >> no[1] >> no[2] >> no[3];
                    elemento = new AmpOp(nome, adicionaNo(no[0]), adicionaNo(no[1]), adicionaNo(no[2]), adicionaNo(no[3]), adicionaInc("j" + nome));
                    break;
                case 'Q':
                    fin >> no[0] >> no[1] >> no[2] >> valor[0] >> valor[1] >> valor[2] >> valor[3];
                    c = fin.peek();
                    if (c == '\n')
                        elemento = new TransBipolar(nome, adicionaNo(no[0]), adicionaNo(no[1]), adicionaNo(no[2]), adicionaInc("j" + nome), valor[0], valor[1], valor[2], valor[3]);
                    else
                    {
                        fin >> cbe >> cbc;
                        elemento = new TransBipolar(nome, adicionaNo(no[0]), adicionaNo(no[1]), adicionaNo(no[2]), adicionaInc("j" + nome), valor[0], valor[1], valor[2], valor[3], cbe, cbc);
                    }
                    break;
                case '.':
                    sair = true;
                    break;
            }
            if (sair)
                break;
            if (elemento)
                listaElementos.push_back(elemento);
        }
    }