コード例 #1
0
void carregaArquivo(tipoArvore* arvore, FILE *arquivo) { //passo por parametro a raiz e url
    FILE *arquivo2; //auxiliar para trocar o ; pelo espaço
    char txt, nome[50];
    float nt1, nt2, nt3;
    int matricula;
    NO *novo_aluno;
    // arquivo apenas ler o arquivo que quer carregar
    arquivo2= fopen ("auxiliar.dat","w"); //Cria um arquivo para ser temporário, onde vou trocar as ',' pelo '.' para os numeros
    while ((txt=fgetc(arquivo))!= EOF) { //caracter por caracter até encontrar o fim do arquivo.
        if (txt == ',') //faço a troca da virgula por ponto, pois o computador so entende float com ponto
            txt = '.';
        fprintf(arquivo2,"%c", txt);
    }
    fclose(arquivo2);//fechando para abrir em modo leitura
    arquivo2 = fopen("auxiliar.dat", "r");
    while (!feof(arquivo2)) { //enquanto nao encontrar o fim do arquivo
        fscanf(arquivo2, "%d; %[^;]s", &matricula, nome); // o [^;] é para ler toda a string ate encontrar ';'
        fscanf(arquivo2, ";%f ;%f ;%f;", &nt1, &nt2, &nt3);
        //Enviando para ARVORE:
        if (!feof(arquivo2)) { //pra que na ultima vez ele nao faça de novo
            novo_aluno = noNovo(nt1, nt2, nt3, nome,matricula); //aloca os valores no novo aluno.
            inserirArvore(novo_aluno, arvore);
        }
    }
    fclose(arquivo2);
    remove("auxiliar.dat");//Apago o arquivo temporário!
}
コード例 #2
0
tipoNo* inserirElemento(int numero, tipoNo *raiz){
    tipoNo* novo = noNovo(numero);

    if(raiz == NULL){
        novo->cor = NEG;
        return novo;
    }

    tipoNo* aux = raiz;

    while(1){
        if(novo->dado == aux->dado){
            free (novo);
            return raiz;
        }

        else if(novo->dado < aux->dado){
            if(aux->noEsquerdo == NULL){
                aux->noEsquerdo = novo;
                novo->noPai = aux;
                return balanceamentoCaso1(raiz, novo);
            }

            else{
                aux = aux->noEsquerdo;
            }
        }

        else {
            if (aux->noDireito == NULL){
                aux->noDireito = novo;
                novo->noPai = aux;
                return balanceamentoCaso1(raiz, novo);
            }

            else{
                aux = aux->noDireito;
            }
        }
    }
}
コード例 #3
0
NO* inserirElemento(NO* novo_aluno, NO *raiz) {
    NO* novo = noNovo(novo_aluno->nota1, novo_aluno->nota2, novo_aluno->nota3,novo_aluno->nome, novo_aluno->matricula);
    if(raiz == NULL) {
        novo->cor = NEG;
        return novo;
    }

    NO* aux = raiz;

    while(1) {
        if(novo_aluno->matricula == aux->matricula) {
            aux = novo; /*Substituindo o novo no lugar do antigo*/
            return raiz;
        }
        else if(novo_aluno->matricula < aux->matricula) {
            if(aux->esquerda == NULL) {
                aux->esquerda = novo;
                novo->pai = aux;
                return balanceamentoCaso1(raiz, novo);
            } else {
                aux = aux->esquerda;
            }
        }

        else {
            if (aux->direita == NULL) {
                aux->direita = novo;
                novo->pai = aux;
                return balanceamentoCaso1(raiz, novo);
            }

            else {
                aux = aux->direita;
            }
        }
    }
}