/* Retorna um nó com o menor elemento da lista apontada por inicio, e guarda nesse nó uma lista com todos os nós que foram comparados com ele */ PNo menorElemento(PPNo inicio) { PNo aux, prox, menor_anterior; aux = prox = *inicio; menor_anterior = NULL; while(aux != NULL && prox != NULL) { /* laço que percorre a lista até o fim */ prox = aux->prox; if(prox) { /* se prox nao apontar para NULL, é porque aux aponta para um nó e prox para outro e podemos comparar os dois */ comps++; /* conta mais uma comparação */ if(aux->valor < prox->valor) { /* se o valor do nó apontado por aux for maior que que o valor de prox */ insereValor(&aux->maiores,prox->valor); /* insere o valor do nó maior (apontado por prox) na lista de valores maiores do nó apontado por aux */ if(menor_anterior) menor_anterior->prox = aux; /* se menor_anterior estiver setado, ele passa a apontar para aux (que é o menor valor) */ aux->prox = NULL; /* aux passa a ser o final da lista ligada (evita problemas de loop infinito em caso de lista com nº de nós impar) */ menor_anterior = aux; /* salva o ponteiro aux em menor_anterior, pois ele vai apontar para o proximo nó menor na proxima comparação */ aux = prox->prox; } else { /* nó prox é maior que nó aux */ insereValor(&prox->maiores,aux->valor); /* insere o valor do nó maior (apontado por prox) na lista de valores maiores do nó apontado por aux */ if(menor_anterior) menor_anterior->prox = prox; /* se menor_anterior estiver setado, ele passa a apontar parar prox (que é o menor valor) */ else *inicio = prox; /* se não, o ponteiro para o inicio da lista passa a apontar para o prox */ menor_anterior = prox; /* salva o endereço apontado por prox em menor_anterior */ aux = prox->prox; } }else { /* se prox nao existe */ if (menor_anterior) menor_anterior->prox = aux; /* se menor_anterior nao for NULL, o nó apontado por ele passa a apontar para aux */ aux = NULL; /* seta aux como NULL para sair do laço */ } } if((*inicio)->prox) { /* se a lista tiver mais que dois nós */ return menorElemento(inicio); /* chama a mesma função recursivamente */ }else { return *inicio; /* o nó que sobrou, é o menor da lista. Retorna ele. */ } }
int main(int argc,char* argv[]) { int n, i, num; PPNo lista; PNo menor; lista = (PPNo) malloc(sizeof(PNo)); *lista = NULL; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&num); insereValor(lista,num); } printf("Procurando segundo menor elemento na lista: "); imprime(lista); menor = menorElemento(lista); printf("Menor elemento: %d (comparacoes: %d de %d)\n",menor->valor,comps,maxComps(n)); if (menor->maiores) { menor = menorElemento(&(menor->maiores)); printf("Segundo menor: %d (comparacoes: %d de %d)",menor->valor,comps,maxComps(n)); } return 0; }
int main(/*int rg ,char *nomeTabela[]*/){ int erro; table *t = NULL; column *c = NULL; t = iniciaTabela("Pesso"); if(t == ERRO_NOME_TABELA_INVALIDO){ printf("Erro: na função iniciaTabela(). Nome da tabela já existente.\n"); return 0; } t = adicionaCampo(t, "Nome", 'S', 20); t = adicionaCampo(t, "Idade", 'I', (sizeof(int))); t = adicionaCampo(t, "Sexo", 'C', (sizeof(char))); t = adicionaCampo(t, "Media", 'D', (sizeof(double))); t = adicionaCampo(t, "Obs", 'S', 40); t = adicionaChavePrimaria(t,"Nome"); t = adicionaChaveEstrangeira(t,"Nome","Pessoa"); erro = finalizaTabela(t); if(erro != SUCCESS){ printf("Erro %d: na função finalizaTabela().\n", erro); return 0; } c = insereValor(c, "Nome", "Um"); c = insereValor(c, "Idade", "40"); c = insereValor(c, "Sexo", "F"); c = insereValor(c, "Media", "2.5"); c = insereValor(c, "Obs", "Obs. Um"); c = insereValor(c, "Nome", "Dois"); c = insereValor(c, "Idade", "40"); c = insereValor(c, "Sexo", "M"); c = insereValor(c, "Media", "1.67"); c = insereValor(c, "Obs", "Obs. Dois"); c = insereValor(c, "Nome", "Dois"); c = insereValor(c, "Idade", "40"); c = insereValor(c, "Sexo", "F"); c = insereValor(c, "Media", "1.456"); c = insereValor(c, "Obs", "Obs. Três"); erro = finalizaInsert("Pesso", c); t = iniciaTabela("Pessoa"); if(t == ERRO_NOME_TABELA_INVALIDO){ printf("Erro: na função iniciaTabela(). Nome da tabela já existente.\n"); return 0; } t = adicionaCampo(t, "Nome", 'S', 20); t = adicionaCampo(t, "Idade", 'I', (sizeof(int))); t = adicionaCampo(t, "Sexo", 'C', (sizeof(char))); t = adicionaCampo(t, "Media", 'D', (sizeof(double))); t = adicionaCampo(t, "Obs", 'S', 40); t = adicionaChavePrimaria(t,"Nome"); t = adicionaChaveEstrangeira(t,"Nome","Pesso"); erro = finalizaTabela(t); if(erro != SUCCESS){ printf("Erro %d: na função finalizaTabela().\n", erro); return 0; } c = insereValor(c, "Nome", "Um"); c = insereValor(c, "Idade", "40"); c = insereValor(c, "Sexo", "F"); c = insereValor(c, "Media", "2.5"); c = insereValor(c, "Obs", "Obs. Um"); c = insereValor(c, "Nome", "Dois"); c = insereValor(c, "Idade", "40"); c = insereValor(c, "Sexo", "M"); c = insereValor(c, "Media", "1.67"); c = insereValor(c, "Obs", "Obs. Dois"); c = insereValor(c, "Nome", "Dois"); c = insereValor(c, "Idade", "40"); c = insereValor(c, "Sexo", "F"); c = insereValor(c, "Media", "1.456"); c = insereValor(c, "Obs", "Obs. Três"); erro = finalizaInsert("Pessoa", c); /* if(erro != SUCCESS){ printf("Erro %d: na função finalizaInsert()\n", erro); return 0; } if(rg == 1){ printf("Erro: nome de tabela nao inserido na linha de comando.\n"); return 0; } struct fs_objects objeto = leObjeto(nomeTabela[1]); tp_table *esquema = leSchema(objeto); if(esquema == ERRO_ABRIR_ESQUEMA){ printf("Erro ao criar o esquema.\n"); return 0; } tp_buffer *bufferpoll = initbuffer(); if(bufferpoll == ERRO_DE_ALOCACAO){ printf("Erro ao alocar memória para o buffer.\n"); return 0; } erro = colocaTuplaBuffer(bufferpoll, 0, esquema, objeto); if(erro != SUCCESS){ printf("Erro %d: na função colocaTuplaBuffer().\n", erro); return 0; } erro = colocaTuplaBuffer(bufferpoll, 1, esquema, objeto); if(erro != SUCCESS){ printf("Erro %d: na função colocaTuplaBuffer().\n", erro); return 0; } erro = colocaTuplaBuffer(bufferpoll, 2, esquema, objeto); if(erro != SUCCESS){ printf("Erro %d: na função colocaTuplaBuffer().\n", erro); return 0; } column *tuplaE = excluirTuplaBuffer(bufferpoll, esquema, objeto, 0, 2); //pg, tupla column *pagina = getPage(bufferpoll, esquema, objeto, 0); if(tuplaE == ERRO_PARAMETRO){ printf("Erro, na função excluirTuplaBuffer(), problemas no parametro.\n"); return 0; } if(pagina == ERRO_PARAMETRO){ printf("Erro, na função getPage(), problemas no parametro.\n"); return 0; } // PARA IMPRIMIR TUPLA EXCLUIDA ----------------------------- //------------------------------------------------------------- printf("\nTupla excluída do Buffer.\n"); int j = 0; for(j=0; j < objeto.qtdCampos; j++){ if(tuplaE[j].tipoCampo == 'S') printf("%s: %s ", tuplaE[j].nomeCampo,tuplaE[j].valorCampo); else if(tuplaE[j].tipoCampo == 'I'){ int *n = (int *)&tuplaE[j].valorCampo[0]; printf("%s: %d ",tuplaE[j].nomeCampo, *n); } else if(tuplaE[j].tipoCampo == 'C'){ printf("%s: %c ",tuplaE[j].nomeCampo, tuplaE[j].valorCampo[0]); } else if(tuplaE[j].tipoCampo == 'D'){ double *n = (double *)&tuplaE[j].valorCampo[0]; printf("%s: %f ",tuplaE[j].nomeCampo, *n); } printf("\n"); } //------------------------------------------------------------- // PARA IMPRIMIR PÁGINA --------------------------------------- //------------------------------------------------------------- printf("\nPágina armazenada na estrutura column *pagina.\n"); for(j=0; j < objeto.qtdCampos*bufferpoll[0].nrec; j++){ if(pagina[j].tipoCampo == 'S') printf("%s: %s ", pagina[j].nomeCampo,pagina[j].valorCampo); else if(pagina[j].tipoCampo == 'I'){ int *n = (int *)&pagina[j].valorCampo[0]; printf("%s: %d ",pagina[j].nomeCampo, *n); } else if(pagina[j].tipoCampo == 'C'){ printf("%s: %c ",pagina[j].nomeCampo, pagina[j].valorCampo[0]); } else if(pagina[j].tipoCampo == 'D'){ double *n = (double *)&pagina[j].valorCampo[0]; printf("%s: %f ",pagina[j].nomeCampo, *n); } printf("\n"); } printf("\n\n"); //------------------------------------------------------------- erro = printbufferpoll(bufferpoll, esquema, objeto, 0); if(erro != SUCCESS){ printf("Erro %d: na função printbufferpoll().\n", erro); return 0; } */ return 0; }
int main () { int numLinhas, numColunas; printf ("Escolha o tamanho da matriz esparsa (MxN) > "); scanf ("%d %d", &numLinhas, &numColunas); if (numLinhas <= 0 || numColunas <= 0) { fprintf (stderr, "Matriz não pode ter dimensão menor que 1\n"); return -1; } matrizEsparsa *mat = criaMatrizEsparsa (numLinhas, numColunas); int opcao, y, x, ret; double valor; double det; do { menu (); scanf ("%d", &opcao); switch (opcao) { case 1: printf ("Escolha a posição da matriz a ser consultada (MxN) > "); scanf ("%d %d", &y, &x); ret = consultaValor (mat, y, x); if (ret != ERRO) { printf ("Matriz[%d][%d] = %d\n", y, x, ret); } break; case 2: printf ("Escolha o valor a ser inserido > "); scanf ("%lf", &valor); printf ("Escolha em que posição da matriz o valor será inserido (MxN) > "); scanf ("%d %d", &y, &x); if (insereValor (mat, y, x, valor) != ERRO) { printf ("Valor %6.3lf inserido em %dx%d\n", valor, y, x); } break; case 3: printf ("Escolha a linha a ser somada > "); scanf ("%d", &y); ret = somaLinha (mat, y); if (ret != ERRO) { printf ("Soma da linha %d = %d\n", y, ret); } break; case 4: printf ("Escolha a coluna a ser somada > "); scanf ("%d", &x); ret = somaColuna (mat, x); if (ret != ERRO) { printf ("Soma da coluna %d = %d\n", x, ret); } break; case 5: printMatriz (mat); break; case 6: det = determinante (mat); if (det != ERRO) { printf ("Determinante da matriz = %f", det); } break; case 7: gaussSeidel (mat); break; } puts (""); } while (opcao != 0); apagaMatrizEsparsa (mat); return 0; }
void example() { int ok = checkCreateDB("UFFS");//cria banco caso não exista current_database = busca("UFFS",1); if (!ok) { int nrTabelas = 3; int nTabela[nrTabelas]; table *tab[nrTabelas]; column *colunas; int object, schema; object = existeArquivo("fs_object.dat"); schema = existeArquivo("fs_schema.dat"); nTabela[0] = existeArquivo(table_name_real("Aluno",current_database)); nTabela[1] = existeArquivo(table_name_real("Inst",current_database)); nTabela[2] = existeArquivo(table_name_real("Inscri",current_database)); if(!nTabela[0]){ tab[0] = iniciaTabela(table_name_real("Aluno",current_database)); //Cria a tabela tab[0] = adicionaCampo(tab[0], "CPF" , 'I', (sizeof(int)) ,PK,"",""); //Cria os atributos tab[0] = adicionaCampo(tab[0], "Nome" , 'S', 20 ,NPK,"",""); tab[0] = adicionaCampo(tab[0], "Endereco", 'S', 20 ,NPK,"",""); tab[0] = adicionaCampo(tab[0], "Peso" , 'D', (sizeof(double)),NPK,"",""); finalizaTabela(tab[0],current_database); } if(!nTabela[1]){ tab[1] = iniciaTabela(table_name_real("Inst",current_database)); tab[1] = adicionaCampo(tab[1], "CodInst" , 'I', (sizeof(int)) ,PK , "",""); tab[1] = adicionaCampo(tab[1], "Nome" , 'S', 20 ,NPK, "",""); tab[1] = adicionaCampo(tab[1], "Endereco" , 'S', 20 ,NPK, "",""); tab[1] = adicionaCampo(tab[1], "Reitor" , 'S', 10 ,NPK, "",""); finalizaTabela(tab[1],current_database); } if(!nTabela[2]){ tab[2] = iniciaTabela(table_name_real("Inscri",current_database)); tab[2] = adicionaCampo(tab[2], "CodMat" , 'I', (sizeof(int)) ,PK, "",""); tab[2] = adicionaCampo(tab[2], "CPF" , 'I', (sizeof(int)) ,FK, table_name_real("Aluno",current_database),"CPF"); tab[2] = adicionaCampo(tab[2], "CodInst" , 'I', (sizeof(int)) ,FK , table_name_real("Inst",current_database),"CodInst"); tab[2] = adicionaCampo(tab[2], "Curso" , 'S', 20 ,NPK,"",""); finalizaTabela(tab[2],current_database); } //Inserção de tuplas na tabela1 colunas = NULL; colunas = insereValor(tab[0],colunas, "CPF", "123456"); colunas = insereValor(tab[0],colunas, "Nome", "Rogerio"); colunas = insereValor(tab[0],colunas, "Endereco", "Rua Marechal"); colunas = insereValor(tab[0],colunas, "Peso", "81.4"); finalizaInsert(table_name_real("Aluno",current_database), colunas); colunas = NULL; colunas = insereValor(tab[0],colunas, "CPF", "654321"); colunas = insereValor(tab[0],colunas, "Nome", "Ricardo"); colunas = insereValor(tab[0],colunas, "Endereco", "RuaClevela"); colunas = insereValor(tab[0],colunas, "Peso", "88.9"); finalizaInsert(table_name_real("Aluno",current_database), colunas); colunas = NULL; colunas = insereValor(tab[0],colunas, "CPF", "1234567"); colunas = insereValor(tab[0],colunas, "Nome", "Natan"); colunas = insereValor(tab[0],colunas, "Endereco", "RuaDelmi"); colunas = insereValor(tab[0],colunas, "Peso", "58.9"); finalizaInsert(table_name_real("Aluno",current_database), colunas); //Inserção de tuplas na tabela2 colunas = NULL; colunas = insereValor(tab[1],colunas, "CodInst", "111"); colunas = insereValor(tab[1],colunas, "Nome", "UFFS"); colunas = insereValor(tab[1],colunas, "Endereco", "RuadeTerra"); colunas = insereValor(tab[1],colunas, "Reitor", "MandaChuva"); finalizaInsert(table_name_real("Inst",current_database), colunas); colunas = NULL; colunas = insereValor(tab[1],colunas, "CodInst", "222"); colunas = insereValor(tab[1],colunas, "Nome", "CEFET"); colunas = insereValor(tab[1],colunas, "Endereco", "RuadePedra"); colunas = insereValor(tab[1],colunas, "Reitor", "MandaVento"); finalizaInsert(table_name_real("Inst",current_database), colunas); colunas = NULL; colunas = insereValor(tab[1],colunas, "CodInst", "333"); colunas = insereValor(tab[1],colunas, "Nome", "UNOESC"); colunas = insereValor(tab[1],colunas, "Endereco", "RuadeAsfal"); colunas = insereValor(tab[1],colunas, "Reitor", "MandaAgua"); finalizaInsert(table_name_real("Inst",current_database), colunas); //Inserção de tupla na tabela3 colunas = NULL; colunas = insereValor(tab[2],colunas, "CodMat", "1401"); colunas = insereValor(tab[2],colunas, "CPF", "123456"); colunas = insereValor(tab[2],colunas, "CodInst", "333"); colunas = insereValor(tab[2],colunas, "Curso", "CC"); finalizaInsert(table_name_real("Inscri",current_database), colunas); colunas = NULL; colunas = insereValor(tab[2],colunas, "CodMat", "1402"); colunas = insereValor(tab[2],colunas, "CPF", "654321"); colunas = insereValor(tab[2],colunas, "CodInst", "222"); colunas = insereValor(tab[2],colunas, "Curso", "CC"); finalizaInsert(table_name_real("Inscri",current_database), colunas); colunas = NULL; colunas = insereValor(tab[2],colunas, "CodMat", "1403"); colunas = insereValor(tab[2],colunas, "CPF", "1234567"); colunas = insereValor(tab[2],colunas, "CodInst", "111"); colunas = insereValor(tab[2],colunas, "Curso", "ADM"); finalizaInsert(table_name_real("Inscri",current_database), colunas); } current_database = -1;//não existe nenhum banco logado }