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); } }