-
Conteúdo Similar
-
Por lucassilvaeq
Alguém poderia me ajudar com essa questão ?
Implemente um algoritmo utilizando a linguagem C, que leia um numero indeterminado de valores inteiros.
O valor 0 (zero) finaliza a entrada de dados. Para cada valor lido, determinar se ele e um número par ou ímpar.
Se o numero for par, então incluí-lo na FILA PAR; caso contrario, incluí-lo na FILA ÍMPAR.
Apos o término da entrada de dados, retirar um elemento de cada fila alternadamente (iniciando-se pela FILA ÍMPAR) ate que ambas as filas estejam vazias. Se o elemento retirado de uma das filas for um valor positivo, entao incluí-lo em uma PILHA; caso contrario, remover um elemento da PILHA.
Finalmente, imprimir o conteúdo da pilha.
-
Por Jeovane Carvalho
Saudações Senhores (as), estou aqui para tentar uma solução, eu desenvolvi uma projeto de menu em C para um trabalho da faculdade, porém estou com um problema dentro dele: eu preciso comparar 2 variáveis tipo: se o usuário cadastrar uma aluno com uma determinada ela irá ficar armazenada numa lista encadeada, e se ele digitar outra matrícula mas usando o mesmo valor , o programa impede de ele cadastrar, até aí eu conseguir fazer , mas quando o usuário cadastrar outro aluno com outro número de matrícula , na hora de tentar cadastrar a terceira matrícula e suando a mesma segunda matrícula ele deixa fazer o cadastro , pois o certo era impedir e apresentar , MATRÍCULA JÁ FOI CADASTRADA..Exemplo..
Cadastrando matricula nº 1 ok , ele não deixa se você tentar usar novamente , mas ao cadastrar a matrícula nº 2 , se tentar usar ele na terceira gravação o programa deixa , e vi que precisava percorrer , pois no while dando printf ele mostra as matrículas 1 e 2 , e vi quando tento fazer a comparação usando o o while ele compara pelo primeiro da lista e não percorrer para o segundo, segue o código...
#include<stdio.h> #include<stdlib.h> #include<locale.h> #include<string.h> #define MAX 3 typedef struct lista{ int matricula; int cod; int NovaMatricula; char aluno[50]; char disciplina1[50]; char disciplina2[50]; char disciplina3[50]; float nota1; float nota2; float nota3; float nota4; float nota5; float nota6; float nota7; float nota8; float nota9; int vazio; struct lista *prox; lista *anterior; lista *inicio; lista *novo; lista *atual; lista *ultimo; lista *aux; }Tlista; Tlista registros[MAX]; void flush_in(){ int ch; while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){} } int verifica_pos( Tlista *dados ) { int cont = 0; Tlista *aux = dados->inicio; while ( aux !=NULL) { cont++; aux = aux->prox; } return(cont); } void inicializa(Tlista *dados){ dados-> inicio = NULL; dados-> ultimo = NULL; dados-> atual = NULL; dados-> aux = NULL; } // AQUI É O CÓDIGO QUE COMPARA A MATRÍCULA// //aqui seria a função que teria que comparar todas as matrículas ou códigos se são iguais...// //FUNÇÃO VERIFICA CÓDIGO int verifica_cod( Tlista *dados, lista *novo){ lista *aux=NULL; printf("\na matricula nova nova %d\n\n", novo->matricula); aux=dados->inicio; if(aux==NULL){ printf("entrou no primero IF %d",novo->matricula); return (1); } dados->atual=dados->inicio; if(novo->matricula==aux->matricula){ while(aux!=NULL){ printf("%d",aux->matricula); aux=aux->prox; } return(0); } printf("\n\n Matricula no FOR: %d\n",dados->atual->matricula); printf("entrou no segundo IF %d", novo->matricula); return (1); }//Final da Função Verifica Código void cadastrar(Tlista *dados, lista *novo){ lista* aux=NULL; if (!novo){ printf("\nNao existe espaco na memoria!"); exit(1); } printf("\n\t\t Digite Nome do Aluno: "); scanf("%s",&novo->aluno); printf("\n\t\t Digite a 1º Disciplina : "); scanf("%s",&novo->disciplina1); flush_in(); printf("\n\t\t Nota do 1º Bimestre: "); scanf("%f",&novo->nota1); fflush(stdin); printf("\n\t\t Nota do 2º Bimestre: "); scanf("%f",&novo->nota2); fflush(stdin); printf("\n\t\t Nota do 3º Bimestre: "); scanf("%f",&novo->nota3); printf("\n\t\t Digite a 2º Disciplina : "); scanf("%s",&novo->disciplina2); fflush(stdin); printf("\n\t\t Nota do 1º Bimestre: "); scanf("%f",&novo->nota4); fflush(stdin); printf("\n\t\t Nota do 2º Bimestre: "); scanf("%f",&novo->nota5); fflush(stdin); printf("\n\t\t Nota do 3º Bimestre: "); scanf("%f",&novo->nota6); printf("\n\t\t Digite a 3º Disciplina : ",setlocale(LC_ALL,"")); scanf("%s",&novo->disciplina3); fflush(stdin); printf("\n\t\t Nota do 1º Bimestre: ",setlocale(LC_ALL,"")); scanf("%f",&novo->nota7); fflush(stdin); printf("\n\t\t Nota do 2º Bimestre: ",setlocale(LC_ALL,"")); scanf("%f",&novo->nota8); fflush(stdin); printf("\n\t\t Nota do 3º Bimestre: ",setlocale(LC_ALL,"")); scanf("%f",&novo->nota9); printf("NOVA %d\n\n", &aux->matricula); printf("\nA matricula e : %d\n\n",novo->matricula); novo->prox=NULL; if(dados->inicio==NULL){ dados->inicio=novo; dados->ultimo=novo; }else{ dados->ultimo->prox=novo; dados->ultimo=novo; } printf("\nMatricula Cadastrada com sucesso !\n\n"); system("pause"); } void listar(Tlista *dados){ Tlista*aux; aux=dados->inicio; if(aux==NULL){ printf("\n Lista Vazia ! \n\n"); }else{ dados->atual=dados->inicio; while(aux!=NULL){ printf("\n\nMatricula %d\n\n", aux->matricula); aux=aux->prox; } } system("pause"); } void consultar(Tlista *dados){ int matbusca,encontrou=0; printf("\n\nDigite a matricula para busca: "); scanf("%d",&matbusca); if (dados->inicio==NULL){ printf("\nLista vazia! Busca nao pode ser processada!\n"); }else{ for (dados->atual=dados->inicio; dados->atual!=NULL;dados->atual=dados->atual->prox){ if (matbusca==dados->atual->matricula){ printf("\n\nMatricula: %d\n",dados->atual->matricula); encontrou=1; break; } if (dados->atual->prox==NULL && encontrou==0) printf("\n\nRegistro nao encontrado!\n\n"); } } system("pause"); } void excluir(Tlista *dados){ lista *anterior ,*atual; int numMatricula,encontrou=0; if(dados->inicio==NULL){ printf("Não existe dados para excluir !\n\n"); system("pause"); }else{ int numMatricula; printf("\nDigite um numero de matricula : ",setlocale(LC_ALL,"")); scanf("%d", &numMatricula); anterior=dados->inicio; atual=dados->inicio; while(atual!=NULL) { if(atual->matricula==numMatricula){ if(atual==dados->inicio){ dados->inicio=dados->inicio->prox; free(atual); break; }else{ if(atual==dados->ultimo){ dados->ultimo=anterior; } //refazendo o encadeamento// anterior->prox=atual->prox; free(atual); break; } }else{ anterior=atual; atual=atual->prox; } } printf("\nMatricula excluida com sucesso !\n\n"); system("pause"); } } int main(){ Tlista inicio,*aux, L; int op=0,posicao,retorno,matricula,NovaMatricula; inicializa(&L); while(op!=6){ system("cls"); printf("--- Digite 1 para cadastrar : "); printf("\n\n--- Digite 2 para listar : "); printf("\n\n--- Digite 3 para consultar : "); printf("\n\n--- Digite 4 para excluir : "); scanf("%d", &op); switch(op) { case 1: posicao=verifica_pos(&L); printf("%d", posicao); if(posicao!=MAX){ lista *novo=NULL; novo=(lista*)malloc(sizeof(lista)); printf("\n\t\t Digite o número da matrícula para o aluno : ",setlocale(LC_ALL,"")); scanf("%d",&novo->matricula); fflush(stdin); retorno = verifica_cod(&L,novo); if ( retorno == 1 ){ cadastrar(&L,novo); }else{ printf("\n\t\tEste número de Matrícula já existe. Tente Outro !\n\n"); printf("\t\t ");system("pause\n\n"); } }else{ printf("\n Voce nao pode realizar mais cadastros !\n\n"); system("pause"); } break; case 2: listar(&L); getchar(); break; case 3: consultar(&L); break; case 4: excluir(&L); break; case '5':printf("\nFIM DE EXECUCAO!"); getchar(); exit(1); default:break; } } } Deixei comentado no código para melhor entendimento... Obrigado !
-
Por Jeovane Carvalho
Alguém poderia me dar um help, de como fazer um laço de repetição dentro de uma lista encadeada em C /C++, pois consigo normalmente sem lista de encadeamento, mas estou com dificuldades em fazer nessa situação, segue o código.
int verifica_pos( void ) { int cont = 0; while ( cont <=2) { if ( registros[cont].vazio == 0 ) return(cont); cont++; } return(-1); }//Final da verifica Posição Por exemplo, neste trecho de código acima, eu chamo uma função que chama esse código e teria que fazer uma varredura em um vetor para ver quantos dados existem na lista encadeada.
-
Por Jeovane Carvalho
Olá Senhores , estou aqui para um help dos senhores mais experientes, e estou com um problema em meu código, pois desenvolvi um menu em C, e esta funcionando praticamente em tudo, e só não consegui imprimi todos os dados na tela ..
Por exemplo, se eu cadastrar mais de 1 aluno em meu sistema eu consigo visualizar de boa buscando pela matrícula, mas se eu pedi para listar todos os alunos cadastrados, ele só busca o primeiro e os outros ele não retorna, segue abaixo o código....
#include<stdio.h> #include<stdlib.h> #include<locale.h> #include<string.h> struct cadastro { int matricula; char aluno[50]; char disciplina1[50]; char disciplina2[50]; char disciplina3[50]; float nota1; float nota2; float nota3; float nota4; float nota5; float nota6; float nota7; float nota8; float nota9; int codaux[20]; int vazio; int cod; }; struct cadastro registros[50]; void flush_in(){ int ch; while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){} } //Funçoes que serao usadas void cadastrar(int cod, int pos); //Funçao para consulta void listar( void ); //Funçao para consulta void consultar( void ); //Funçao para exibir relatorio int relatorio( void ); //Função para verificar posição int verifica_pos( void ); //Função para verificar codigo int verifica_cod( int cod ); //Função para verificar posição do codigo int verifica_pos( void ); //Função para excluir cadastro void excluir( void ); int main(void){ int op = 0,senha,posicao, matricula, retorno; printf("######### SISTEMA DE NOTAS DE ALUNOS: ##############\n\n "); do { printf(" DIGITE UMA SENHA : "); scanf ("%d",&senha); if(senha!=1) { printf("Senha incorreta. Tente Novamente \n\n"); system("pause"); system("cls"); } } while(senha!=1); while(op!=5){ system("cls"); printf ("\n\n *** MENU DE NOTAS DE ALUNO: ***\n\n ",setlocale(LC_ALL,"")); printf ("| 1 - Matrícula do Aluno |\n",setlocale(LC_ALL,"")); printf (" | 2 - Lista de Alunos |\n",setlocale(LC_ALL,"")); printf (" | 3 - Listar dados do Aluno |\n",setlocale(LC_ALL,"")); printf (" | 4 - Pesquisar por Matrícula |\n",setlocale(LC_ALL,"")); printf (" | 5 - Sair |\n",setlocale(LC_ALL,"")); scanf ("%d", &op); switch(op) { case 1: // CADASTRAR { posicao=verifica_pos(); if ( posicao != -1 ) { printf("\nDigite o número da matrícula para o aluno : "); scanf("%d",&matricula); fflush(stdin); retorno = verifica_cod( matricula); if ( retorno == 1 ) cadastrar( matricula, posicao ); else printf("\nCodigo ja existente\n"); system ("pause"); } else printf("\nNao e possivel realizar mais cadastros!\n"); break; } case 2: // LISTAR { listar(); break; } case 3:// CONSULTAR { consultar(); break; } case 4:// EXCLUIR { excluir(); system ("pause"); break; } // SAIR case 5: { printf("\n Saindo do Sistema - Tchau"); getchar(); return 0; break; } default :// OPÇÃO INVÁLIDA printf("Opcão Inválida",setlocale(LC_ALL,"")); break; } } getchar(); } // FUNÇAO CADASTRAR void cadastrar( int cod, int pos ) { pos = verifica_pos(); registros[pos].cod = cod; printf("\nDigite Nome do Aluno: "); scanf("%s",®istros[pos].aluno); printf("\nDigite a 1º Disciplina : "); scanf("%s",®istros[pos].disciplina1); flush_in(); printf("\nNota do 1º Bimestre: "); scanf("%f",®istros[pos].nota1); fflush(stdin); printf("\nNota do 2º Bimestre: "); scanf("%f",®istros[pos].nota2); fflush(stdin); printf("\nNota do 3º Bimestre: "); scanf("%f",®istros[pos].nota3); printf("\nDigite a 2º Disciplina : "); scanf("%s",®istros[pos].disciplina2); fflush(stdin); printf("\nNota do 1º Bimestre: "); scanf("%f",®istros[pos].nota4); fflush(stdin); printf("\nNota do 2º Bimestre: "); scanf("%f",®istros[pos].nota5); fflush(stdin); printf("\nNota do 3º Bimestre: "); scanf("%f",®istros[pos].nota6); printf("\nDigite a 3º Disciplina : ",setlocale(LC_ALL,"")); scanf("%s",®istros[pos].disciplina3); fflush(stdin); printf("\nNota do 1º Bimestre: ",setlocale(LC_ALL,"")); scanf("%f",®istros[pos].nota7); fflush(stdin); printf("\nNota do 2º Bimestre: ",setlocale(LC_ALL,"")); scanf("%f",®istros[pos].nota8); fflush(stdin); printf("\nNota do 3º Bimestre: ",setlocale(LC_ALL,"")); scanf("%f",®istros[pos].nota9); registros[pos].vazio = 1; printf("\nCadastro Realizado com Sucesso!\n\n",setlocale(LC_ALL,"")); getchar(); system("cls"); } //Final da Função Cadastrar // FUNÇAO LISTAR void listar() { setlocale(LC_ALL," "); int i,j,cod,posicao,pos, retorno; pos = verifica_pos(); for (i=0; i<pos; i++ ) { if (registros[i].vazio==1) { printf("\n\n\nRESULTADO DA BUSCA: \n\n"); printf("\nForam encontrado (os) Aluno (s) : %d\n" ,registros[i].cod); printf("**********************************************\n\n"); printf("\nMatrícula : %d\n",registros[i].cod); printf("\nNome do Aluno é: %s\n" ,registros[i].aluno); printf("\nDisciplina : %s\n",registros[i].disciplina1); printf("\nNota do 1º Bimestre: %.1f\t",registros[i].nota1); printf("\nNota do 2º Bimestre: %.1f\t",registros[i].nota1); printf("\nNota do 3º Bimestre: %.1f\n",registros[i].nota3); printf("\nDisciplina : %s\n",registros[i].disciplina2); printf("\nNota do 1º Bimestre: %.1f\t",registros[i].nota4); printf("\nNota do 2º Bimestre: %.1f\t",registros[i].nota5); printf("\nNota do 3º Bimestre: %.1f\n",registros[i].nota6); printf("\nDisciplina : %s\n",registros[i].disciplina3); printf("\nNota do 1º Bimestre: %.1f\t",registros[i].nota7); printf("\nNota do 2º Bimestre: %.1f\t",registros[i].nota8); printf("\nNota do 3º Bimestre: %.1f\n",registros[i].nota9); printf("\n\n"); printf("**********************************************\n\n"); system("pause"); getchar(); break; } i++; } if (registros[i].vazio==0) { printf("\nCódigo não encontrado\n\n"); system("pause"); system("cls"); return ; } } //FUNÇÃO CONSULTAR void consultar( void ) { int cont = 0, cod,posicao, retorno,codaux; printf("\nEntre com o código: ",setlocale(LC_ALL,"")); scanf("%d",&cod); system("cls"); while ( cont <= 100 ) { if (registros[cont].cod==cod) { if (registros[cont].vazio==1) { printf("\n\n\nRESULTADO DA BUSCA: \n\n"); printf("\nForam encontrado (os) Aluno (s) : %d\n" ,registros[cont].cod); printf("**********************************************\n\n"); printf("\nMatrícula : %d\n",registros[cont].cod); printf("\nNome do Aluno é: %s\n" ,registros[cont].aluno); printf("\nDisciplina : %s\n",registros[cont].disciplina1); printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota1); printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota1); printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota3); printf("\nDisciplina : %s\n",registros[cont].disciplina2); printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota4); printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota5); printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota6); printf("\nDisciplina : %s\n",registros[cont].disciplina3); printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota7); printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota8); printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota9); printf("\n\n"); system ("pause"); system("cls"); break; } } cont++; if (registros[cont].vazio==0) { printf("\nCódigo não encontrado\n\n",setlocale(LC_ALL,"")); system("pause"); system("cls"); return ; } } } //FUNÇÃO VERIFICA POSIÇÃO int verifica_pos( void ) { int cont = 0; while ( cont <= 100 ) { if ( registros[cont].vazio == 0 ) return(cont); cont++; } return(-1); } //FUNÇÃO ZERAR void zerar( void ) { int cont; for ( cont = 0; cont <= 100; cont++ ) registros[cont].vazio = 0; } //FUNÇÃO VERIFICA CODIGO int verifica_cod( int cod ) { int cont = 0; while ( cont <= 100 ) { if ( registros[cont].cod == cod ) return(0); cont++; } return(1); } //FUNÇÃO EXCLUIR void excluir( void ) { int cod, cont = 0; char resp; printf("\nEntre com o código do registro que deseja excluir\n",setlocale(LC_ALL,"")); scanf("%d", &cod ); while ( cont <= 100 ) { if ( registros[cont].cod == cod ) { // FALTOU if ( registros[cont].vazio == 1 ) { printf("\n\n\nRESULTADO DA BUSCA: \n\n"); printf("\nForam encontrado (os) Aluno (s) : %d\n" ,registros[cont].cod); printf("**********************************************\n\n"); printf("\nMatrícula : %d\n",registros[cont].cod); printf("\nNome do Aluno é: %s\n" ,registros[cont].aluno); printf("\nDisciplina : %s\n",registros[cont].disciplina1); printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota1); printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota1); printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota3); printf("\nDisciplina : %s\n",registros[cont].disciplina2); printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota4); printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota5); printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota6); printf("\nDisciplina : %s\n",registros[cont].disciplina3); printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota7); printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota8); printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota9); getchar(); printf("\nDeseja realmente excluir ? S/N:"); scanf("%c",&resp); if ( ( resp == 'S' ) || ( resp == 's' ) ) { registros[cont].vazio=0; printf("\nExclusão feita com sucesso\n\n"); break; } else { if ( ( resp == 'N' ) || ( resp == 'n' ) ) { printf("Exclusão cancelada!\n"); break; } } } } cont++; if ( cont > 100 ) printf("\nCodigo nao encontrado\n"); } system("pause"); system("cls"); } Como eu disse, ele roda de boa só não lista todos os alunos e apenas 0 1º, um #trabalhozinho de faculdade.. Obrigado !
-
Faça um programa em C com uma função para verificar se um número é positivo ou negativo. Sendo que o valor de retorno será 1 se positivo, -1 se negativo e 0 se for igual a 0. Faça o programa principal para chamar e testar a função.
Compartilhar este post
Link para o post
Compartilhar em outros sites