Ir ao conteúdo
  • Cadastre-se

Igor Vargas

Membro Pleno
  • Posts

    180
  • Cadastrado em

  • Última visita

Tudo que Igor Vargas postou

  1. @AnsiC eu tenho que fazer algo parecido com a ilustração abaixo. Não entendi muito bem essa parte de apontar para outra lista. Porque as letras estão em outra lista, o que eu pensei em fazer é. Por exemplo. eu digito Igor, pego a inicial "i" e aponto ela pra lista que vai estar com meu nome, agora eu adiciono outra pessoa digamos AnsiC faço a mesma coisa só que o ultimo nome teria que apontar pra proxima letra como se fosse uma lista, foi assim que eu entendi. Mas não estou conseguindo emplementar. adicionado 9 minutos depois @AnsiC Eu dei uma atualizada no código. #include <stdio.h> #include <stdlib.h> #include <string.h> #include "agenda.h" #define TAM 50 main(){ contato *c; letras *l; c = NULL; l = NULL; char nome[TAM]; char sobrenome[TAM]; char email[TAM]; int numero; printf("_______________________\n"); printf("Bem-Vindo a Sua Agenda\n"); printf("_______________________\n"); //printf("\n"); int escolha; do{ printf("\n"); printf("1: Adicionar contato\n"); printf("2: Remover Contato\n"); printf("3: Exibir Contatos\n"); printf("4: Favoritos\n"); printf("5: Sair\n"); printf("_______________________\n"); printf("Escolha a Opcao Desejada: "); scanf("%d",&escolha); switch(escolha){ case 1: printf("_______________________\n"); printf("voce Selecionou Adicionar Contato\n"); printf("_______________________\n"); printf("Nome do Contato: "); fflush(stdin); gets(nome); printf("Sobrenome do Contato: "); gets(sobrenome); fflush(stdin); printf("email do contato: "); gets(email); printf("Numero de Contato: "); scanf("%d",&numero); c =inserir(nome,sobrenome,email,numero,c); l = insereChar(c,l); ordenar(c); break; //menu do programa case 2: printf("_______________________\n"); printf("voce Selecionou Remover Contato\n"); printf("_______________________\n"); printf("Digite o nome do contato: "); char nomec[TAM],sobrenomec[TAM]; fflush(stdin); gets(nomec); printf("Digite o Sobrenome: "); gets(sobrenomec); l =retiranome(c,nomec); l =retirasobrenome(c,sobrenomec); printf("Contato removido com sucesso!\n"); break; case 3: imprime(c,l); break; case 4: break; default: printf("Fim do Programa"); break; } }while(escolha != 5); } As funções estão nesse biblioteca #define TAM 50 #define MAX 500 typedef struct CONTATO{ char *nome; char *sobrenome; int numeroT; char *email; struct CONTATO *prox; }contato; typedef struct LETRAS{ char inicial; struct LETRAS *prox; }letras; contato *inserir(char *nome,char *sobrenome,char *email, int numero, contato *c){ contato *novo; novo = (contato*)malloc(sizeof(contato)); novo->nome =(char *)malloc(strlen(nome)+1); strcpy(novo->nome,nome); novo->sobrenome=(char *)malloc(strlen(sobrenome)+1); strcpy(novo->sobrenome,sobrenome); novo->email=(char *)malloc(strlen(email)+1); strcpy(novo->email,email); //inserção de contatos novo->numeroT=numero; novo->prox = c; return novo; } letras *insereChar(contato *c,letras *l){ letras *novo; contato *novoc = c; char passa[TAM]; if(c == NULL){ return 0; }else{ novo = (letras*)malloc(sizeof(letras)); passa[TAM]= novoc->nome; strcpy(passa,c->nome); char i = passa[0]; novo->inicial = i; novo->prox = l; //inserção de iniciais } return novo; } void ordenar(contato *c) { if(c == NULL || c->prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento contato *aux = c; contato *t; char s[MAX]; //precisa de espacao suficiente para armazenar o nome while(aux != NULL) { t = aux->prox; while(t != NULL) { if(strcmp(aux->nome, t->nome) > 0) { //se vir depois strcpy(s, aux->nome); strcpy(aux->nome, t->nome); strcpy(t->nome, s); } t = t->prox; } aux = aux->prox; } } void imprime(contato *c, letras *l){ contato *p=c; letras *t=l; while(p!=NULL && t!=NULL){ //printf("\n"); printf("%c-> %s %s\n",t->inicial,p->nome,p->sobrenome); t =t->prox; p=p->prox; } } contato *retiranome(contato *c, char *nome){ contato *ant = NULL; contato *p = c; while (p!=NULL && strcmp(p->nome,nome)!=0){ ant = p; p = p->prox; } if(p == NULL){ return c; //retira o nome } if(ant == NULL){ c = p->prox; }else{ ant->prox = p->prox; } free(p); return c; } contato *retirasobrenome(contato *c, char *sobrenome){ contato *ant = NULL; contato *p = c; while (p!=NULL && strcmp(p->sobrenome,sobrenome)!=0){ ant = p; p = p->prox; //retira o sobrenome } if(p == NULL){ return c; } if(ant == NULL){ c = p->prox; }else{ ant->prox = p->prox; } free(p); return c; }
  2. @giu_d Daria, acontece que eu criei outro post pra ficar melhor caso outros membros tenha a mesma dúvida
  3. Olá estou com duvida de como faço para minha lista LESTRAS apontar para CONTATOS. Toda vez que eu digito um novo nome preciso guardar a inicial do nome e apontar ela para os nomes que contem aquela inicial, mas estou com problemas para implementar. #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 50 #define MAX 500 typedef struct CONTATO{ char *nome; char *sobrenome; int numeroT; char *email; struct CONTATO *prox; struct CONTATO *inicial; }contato; typedef struct LETRAS{ char inicial; struct LETRAS *prox; }letras; contato *inserir(char *nome,char *sobrenome,char *email, int numero, contato *c){ contato *novo; novo = (contato*)malloc(sizeof(contato)); novo->nome =(char *)malloc(strlen(nome)+1); strcpy(novo->nome,nome); novo->sobrenome=(char *)malloc(strlen(sobrenome)+1); strcpy(novo->sobrenome,sobrenome); novo->email=(char *)malloc(strlen(email)+1); strcpy(novo->email,email); novo->numeroT=numero; novo->prox = c; return novo; } letras *insereChar(letras *l, char nome){ letras *novo; novo = (letras*)malloc(sizeof(letras)); novo->inicial = nome; novo->prox = l; return novo; } void ordenar(contato *l) { if(l == NULL || l->prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento contato *aux = l; contato *t; char s[MAX]; //precisa de espacao suficiente para armazenar o nome while(aux != NULL) { t = aux->prox; while(t != NULL) { if(strcmp(aux->nome, t->nome) > 0) { //se vir depois strcpy(s, aux->nome); strcpy(aux->nome, t->nome); strcpy(t->nome, s); } t = t->prox; } aux = aux->prox; } } void imprime(contato *c, letras *l){ contato *p=c; letras *t=l; while(p!=NULL && t!=NULL){ //printf("\n"); printf("%c-> %s %s\n",t->inicial,p->nome,p->sobrenome); t =t->prox; p=p->prox; } } main(){ contato *l; letras *c; l = NULL; c = NULL; char nome[TAM]; char sobrenome[TAM]; char email[TAM]; int numero; printf("_______________________\n"); printf("Bem-Vindo a Sua Agenda\n"); printf("_______________________\n"); //printf("\n"); int escolha; do{ printf("\n"); printf("1: Adicionar contato\n"); printf("2: Remover Contato\n"); printf("3: Exibir Contatos\n"); printf("4: Favoritos\n"); printf("5: Sair\n"); printf("_______________________\n"); printf("Escolha a Opcao Desejada: "); scanf("%d",&escolha); switch(escolha){ case 1: printf("_______________________\n"); printf("voce Selecionou Adicionar Contato\n"); printf("_______________________\n"); printf("Nome do Contato: "); fflush(stdin); gets(nome); char passa = nome[0]; c = insereChar(c,passa); printf("Sobrenome do Contato: "); gets(sobrenome); fflush(stdin); printf("email do contato: "); gets(email); printf("Numero de Contato: "); scanf("%d",&numero); l =inserir(nome,sobrenome,email,numero,l); ordenar(l); break; case 2: break; case 3: imprime(l,c); break; case 4: break; default: printf("Fim do Programa"); break; } }while(escolha != 5); }
  4. Aqui funcionou normal, talvez seja sua ide.
  5. @giu_d Fiz de outra forma mas desse jeito tb da certo. valeu pela ajuda adicionado 7 minutos depois @giu_d Se puder me ajudar em outra dúvida. Preciso fazer uma lista encadeada apontar para outra. Por exemplo. A pessoa digita o nome dela e eu pegarei a primeira letra do nome dela que ficará numa outra lista e irei apontar para essa lista que contem os nomes das pessoas. Estou fazendo de uma maneira que talvez não seja a certa. O problema que eu n sei como apontar uma lista para outra .
  6. Olá estou com um problema onde preciso passar algumas informações e na hora do printa ele esta duplicando a string. Minha dúvida é como eu passo strings para uma lista encadeada. Pois quando eu mando a primeira string ele vai normal mas quando eu adiciono outra pessoa ele muda o nome da pessoa anterior para o nome que foi digitado. #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 50 typedef struct CONTATO{ char *nome; char *sobrenome; int numeroT; char *email; struct CONTATO *prox; struct CONTATO *inicial; }contato; contato *inserir(char *nome,char *sobrenome,char *email, int numero, contato *c){ contato *novo; novo = (contato*)malloc(sizeof(contato)); novo->nome = nome; novo->sobrenome=sobrenome; novo->email=email; novo->numeroT=numero; novo->prox = c; return novo; } void ordenar(contato *l) { if(l == NULL || l->prox == NULL) return; //se for nulo(vazio), ou apenas 1 elemento contato *aux = l; contato *t; char s[100]; //precisa de espacao suficiente para armazenar o nome while(aux != NULL) { t = aux->prox; while(t != NULL) { if(strcmp(aux->nome, t->nome) > 0) { //se vir depois strcpy(s, aux->nome); strcpy(aux->nome, t->nome); strcpy(t->nome, s); } t = t->prox; } aux = aux->prox; } } contato *l; l = NULL; char nome[TAM]; char sobrenome[TAM]; char email[TAM]; int numero; printf("_______________________\n"); printf("Bem-Vindo a Sua Agenda\n"); printf("_______________________\n"); //printf("\n"); int escolha; do{ printf("1: Adicionar contato\n"); printf("2: Remover Contato\n"); printf("3: Exibir Contatos\n"); printf("4: Favoritos\n"); printf("5: Sair\n"); printf("_______________________\n"); printf("Escolha a Opcao Desejada: "); scanf("%d",&escolha); switch(escolha){ case 1: printf("_______________________\n"); printf("voce Selecionou Adicionar Contato\n"); printf("_______________________\n"); printf("Nome do Contato: "); fflush(stdin); gets(nome); printf("Sobrenome do Contato: "); gets(sobrenome); fflush(stdin); printf("email do contato: "); gets(email); printf("Numero de Contato: "); scanf("%d",&numero); l =inserir(nome,sobrenome,email,numero,l); //ordenar(l); break; case 2: break; case 3: imprime(l); break; case 4: break; default: printf("Fim do Programa"); break; } }while(escolha != 5); }
  7. @AnsiC O problema ta mesmo na alocação da memória, eu fiz o sizeof das duas listas e deu 16. Ou seja minha 3 lista precisa ter 32 certo?. e ela ta me mostrando 16 tb .
  8. Olá estou tentando fazer um exercicio onde preciso intercalar 2 listas encadeadas. Mas a minha função só esta retornando um numero apenas. #include <stdio.h> #include <stdlib.h> typedef struct LISTA{ int dado; struct LISTA *prox; }lista; typedef struct LISTA2{ int dado; struct LISTA2 *prox; }lista2; lista *insere(lista *p, int valor){ lista *novo; novo=(lista*)malloc(sizeof(lista)); novo->dado = valor; novo->prox = p; return novo; } void imprime(lista *l){ lista *p = l; for(p = l; p != NULL; p=p->prox){ printf("%d-",p->dado); } } lista* intercala (lista* l, lista2* l2){ lista *li = (lista*)malloc(sizeof(lista)); lista *p1; lista2 *p2; for(p1 =l, p2 =l2; p1!= NULL && p2!=NULL; p1 =p1->prox, p2=p2->prox){ li->dado = p1->dado; li->prox = p1->prox; li->dado = p2->dado; li->prox = p2->prox; } return li; } main(){ lista *l; lista2 *l2; l = NULL; l2 = NULL; l = insere(l, 1); l = insere(l, 2); l = insere(l, 3); imprime(l); printf("\n"); l2 = insere(l2, 4); l2 = insere(l2, 5); l2 = insere(l2, 6); imprime(l2); printf("\n"); //concatena(l,l2); //imprime(l); l =intercala (l,l2); imprime(l); }
  9. @giu_d valeu pela ajuda. Dei uma lida no matérial e me ajudou bastante a entender melhor. Comecei listas encadeadas recentemente então ainda estou me acostumando.
  10. @giu_d claro. #include <stdio.h> #include <stdlib.h> typedef struct LISTA{ int dado; struct LISTA *prox; }lista; lista *insere(lista *p, int valor){ lista *novo; novo=(lista*)malloc(sizeof(lista)); novo->dado = valor; novo->prox = p; return novo; } void imprime(lista *p){ lista *novo; for(novo = p; novo!= NULL; novo=novo->prox){ printf("%d",novo->dado); } } lista *ordemCrescente(lista *p){ lista *aux = NULL; lista *novo = p; int *recebe; int x=0; int menor=0; while(novo != NULL){ if(novo->dado < menor){ aux = novo->prox; novo = novo->dado; novo->dado = aux; return p; } novo= novo->prox; } } main(){ lista *l,i; lista *primeiro, *ultimo; l = NULL; l = insere(l, 20); l = insere(l, 30); l = insere(l, 40); l = insere(l, 50); l = insere(l, 60); imprime(l); printf("\n"); l = ordemCrescente(l); imprime(teste); }
  11. Estou com uma dúvida onde preciso mostrar a lista em ordem crescente.A funcão esta retornando nulo. ista *ordemCrescente(lista *p){ lista *aux = NULL; lista *novo = p; int *recebe; int x=0; int menor=0; while(novo != NULL){ if(novo->dado < menor){ aux = novo->prox; novo = novo->dado; novo->dado = aux; return p; } novo= novo->prox; } }
  12. @AnsiC Pra mim é mais questão de acessibilidade. Se eu vejo um NULL já sei que é vazio. Se não terei que procurar aquela variavel no código pra ver se é 0 ou não.
  13. O código que eu fiz no caso é estático, só podia usar vetores, era um exercicio pra fazer em aula. Mas sobre a questão de retornar a pilha vazia era só colocar um NULL ali pra dizer que esta vazia.@AnsiC @giu_d
  14. Estou com uma dúvida. O meu programa não esta retirando o topo na função pop, ele esta tirando só o numero do inicio e também na hora de exibir ele esta mostrando os numeros que foram retirados. #include <stdio.h> #include <stdlib.h> #define MAX 10 int pilha[MAX]; int inicio,fim; int pilhaCheia(){ return (fim == MAX); // caso o final for igual a 10 esta cheia } int pilhaVazia(){ return (inicio == fim); // verifica se esta vazio e retorna; } void push(int x){ if( !pilhaCheia() ){ pilha[fim++] = x; //adiciona o valor e soma +1 posiçao }else{ printf("Pilha cheia \n"); } } int pop(){ int aux; if( !pilhaVazia() ){ aux=pilha[fim - 1]; //volta uma posiçao e passa o numero e entao decrementa fim--; return aux; }else{ printf("Pilha vazia \n"); return -1; } } void exibe(int pilha[MAX]){ int x; for( x=0; x < MAX; x++){ printf("%d",pilha[x]); //exibe o vetor; } } main(){ inicio = 0; fim = 0; int escolha,valor; do{ printf("\n1 EMPILHA:\n"); printf("\n2 DESEMPILHA:\n"); printf("\n3 Mostra:\n"); printf("\n4 Sair:\n"); scanf("%d",&escolha); int x; switch(escolha){ case 1: printf("Escolha o valor:"); scanf("%d",&valor); push(valor); break; case 2: pop(); printf("%d",pop()); break; case 3: for(x = 0 ; x < MAX ; x++){ printf("%d",pilha[x]); } break; default: break; } }while( escolha != 4); }
  15. @AnsiC Crie uma variável do tipo inteiro e atribua um valor qualquer. • Crie um ponteiro que aponte para esta variável (receba seu endereço de memória). • Utilizando ponteiros, imprima na tela o valor contido na variável. • Imprima o conteúdo das próximas 20 posições inteiras na memória.
  16. @AnsiC foi dado em aula, assim que o material for postado eu coloco aqui. Mas basicamente era criar uma variavel e um ponteiro e depois mostrar o conteudo das proximas 20 posições.
  17. Eai pessoal. Estou com uma dúvida nesse exercício. Preciso mostras os 20 números a frente do numero que eu coloquei só que com o ponteiro encrementado e mostrar o conteudo dele. O problema que depois da 1 posição ele mostra zeros. #include <stdio.h> #include <stdlib.h> main(){ int x=10, *pont; //numero é 10 pont = &x; int y; for(y=0; y<20; y++){ printf("%d\n",*pont); pont+=1; } }
  18. Eai galera preciso entregar um trabalho quinta feira e não estou conseguindo concluir essa parte. Ao associar um aluno a uma disciplina, verificar se os blocos de horário necessários estão disponíveis na grade do aluno, se sim, associar a disciplina, senão mostrar uma mensagem informando o conflito. Por exemplo, se o aluno já estiver associado a uma disciplina que ocorre na terça as 13, não será possível adicionar outra disciplina que ocorre no mesmo dia e horário. Da maneira que eu fiz você escolhe a disciplina e ela será adicionada a grade. Mas ela esta funcionando apenas para um aluno, ou seja, quando eu adiciono outro aluno a disciplina anterior continua lá. Me falaram que seria mais fácil adicionar a disciplina direto a grade e depois verificar a questão do horário. Abaixo tem como deve ficar na hora de printar; Segunda Terça Quarta Quinta sexta 08:00 127 - - - - 10:00 - - - - - 13:00 - 127 - - - 15:00 - - 135 - - int add_Aluno(struct registro al[3], struct disciplinas add_Dis[5], struct registro grade_T[4][5]){ int dis,x,y,guarda[5],cont=0,num,a,b,i,salva,retorna; char resp; int volta,j,contador=0; printf("\n\n"); printf("--------------------------------------\n"); printf("---voce selecionou adicionar aluno.---\n"); printf("--------------------------------------\n"); printf(" Lista de Disciplinas\n"); printf(" Codigo Nome\n\n"); printf("\n"); do{ int yy=1; printf("Digite seu nome:"); fflush(stdin); /*//Funcão de Cadastro do aluno*/ gets(al[cont].nome); printf("Digite seu Sobrenome:"); gets(al[cont].sobrenome); strcat(al[cont].nome, al[cont].sobrenome); printf("Digite sua Matricula:"); scanf("%d",&al[cont].matricula); cont++; printf("Digite seu e-mail:"); fflush(stdin); gets(al[i].email); for (i = 0; i < strlen(al[i].email); i++) { //Verifica se o email digitado é valido ou não if (al[i].email == '@' && al[i].email=='.') { salva=1; } } do{ volta=1; printf("Digite em quantas materias deseja se matricular:"); scanf("%d",&num); printf("Digite o codigo das diciplinas que voce deseja se matricular\n"); for(y=0; y<num; y++){ scanf("%d",&al[y].l_Disciplinas); } for(x=0; x<num; x++){ for(j=0;j<num;j++){ if((al[x].l_Disciplinas == 127 && al[j].l_Disciplinas == 132 && j != x )|| al[x].l_Disciplinas ==135 && al[j].l_Disciplinas == 143) { printf("voce não pode se inscrever em duas disciplas de mesmo horario\n"); volta=0; al[x].l_Disciplinas=0; break; } else if(al[x].l_Disciplinas==122) { grade_T[0][0].grade[0][0]=122; grade_T[1][1].grade[1][1]=122; } else if(al[x].l_Disciplinas==127) { grade_T[2][1].grade[2][1]=127; grade_T[4][2].grade[4][2]=127; } else if(al[x].l_Disciplinas==132) { grade_T[2][1].grade[1][3]=132; grade_T[2][1].grade[1][3]=132; } else if(al[x].l_Disciplinas==143) { grade_T[1][4].grade[1][4]=143; } else if(al[x].l_Disciplinas==145) { grade_T[1][2].grade[1][2]=145; grade_T[1][4].grade[1][4]=135; } } } }while(volta != 1 ); printf("Deseja Cadastrar outro aluno? s/n:"); fflush(stdin); scanf("%c",&resp); }while(resp != 'n'); } A função abaixo é onde eu mostro a grade. void consulta(struct registro al_C[3],struct disciplinas dis[5], struct registro grade_T[4][5]){ int x=0,escolhe,a,b,y; char nome[20]; char salva[3]; int cont_L=0; int teste[3]; char resp; int matricula_N,salva_V; char string[3]; char horas[20]; strcpy(dis[0].h_Semanal,"08:00"); strcpy(dis[1].h_Semanal,"10:00"); strcpy(dis[2].h_Semanal,"13:00"); strcpy(dis[3].h_Semanal,"15:00"); printf("\n\n"); printf("--------------------------------------\n"); printf("---voce selecionou Consultar aluno.---\n"); printf("--------------------------------------\n"); printf("1.Pesquisa por Nome\n"); printf("2.Pesquisa por Matricula\n"); fflush(stdin); scanf("%d",&escolhe); if(escolhe ==1){ printf("Digite o nome do aluno:"); fflush(stdin); gets(nome); for(x=0; x<strlen(nome); x++){ if (nome[x] == al_C[x].nome && nome[x + 1] == al_C[x + 1].nome && nome[x + 2] == al_C[x + 2].nome) //nessa linha são comparadas as 3 letras salva_V=1; } for(x=0; x<4; x++){ if(strcmp(al_C[x].nome, nome)==0){ salva_V=1; } } } else if(escolhe == 2) { printf("Digite a Matricula do aluno:"); fflush(stdin); scanf("%d",&matricula_N); for(x=0; x<4; x++) { if(al_C[x].matricula == matricula_N ){ /*//compara as duas matricular se são iguais se for ele printa a grade do aluno*/ salva_V=1; } } } if(salva_V == 1){ printf(" Segunda Terca Quarta Quinta Sexta\n"); for(a=0; a<4; a++){ printf("%s",dis[a].h_Semanal); for(b=0; b<5; b++){ if(grade_T[a][b].grade[a][b]==127 || grade_T[a][b].grade[a][b]==122 || grade_T[a][b].grade[a][b]==135 || grade_T[a][b].grade[a][b]==132 ||grade_T[a][b].grade[a][b]==143){ printf(" "); printf("[%d]", grade_T[a][b].grade[a][b]); }else{ printf(" "); printf("[---]"); } } printf("\n"); } } }
  19. Email deve possuir: 3 caracteresou mais; um sinal de arroba (@); outros 3 caracteres ou mais; seguidos de um sinal de ponto final (.); e mais um conjunto de pelo menos 2 caracteres; @giu_d não funciona pra todas condições. Debuguei e ele pula a condição do @ #include <stdio.h> #include <string.h> main(){ int x; char email[50]={"[email protected]"}; int arroba,ponto,passa,maior,c_P,c_S,i; int tam=strlen(email); char teste='.'; for (i = 0; i < tam; i++) { if(email[i] > 3){ maior=1; }if(email[i] == '@'){ arroba=1; }if(arroba == 1 && email[i] >= 3){ c_P=1; }if(email[i]=='.'){ ponto=1; }if(ponto=1 && email[i] >=2){ c_S=1; } if(maior==1 && arroba == 1 && c_P==1 && c_S ==1){ passa=1; }else{ passa=0; } } if(passa==1){ printf("Valido"); }else{ printf("Invalido"); } }
  20. Eu fiz esse código para a verificação mas ele n esta reconhecendo a condição. do{ printf("Digite seu e-mail:"); fflush(stdin); gets(al[cont].email); for (i = 0; i < strlen(al[i].email); i++) { if(al[i].email=='@'){ salva_A=i; printf("%d",salva_A); }else if(al[i].email=='.'){ salva_B=i; } if(al[i].email < 2 && al[i].email=='@'){ printf("E-mail invalido!"); yy=1; } else if(al[i+salva_A].email=='@' && al[i+salva_B].email=='.'){ printf("E-mail valido!"); yy=0; } } }while(yy!=0);
  21. @devair1010 é que eles estão em funções diferente na primeira função ele pega só os dados. Na segunda função ele printa a matriz. só que ele não esta passando esse código das disciplinas em nenhuma função ele só esta lendo o numero eu acho.
  22. Olá estou com dúvida em uma questão. Abaixo seria onde o aluno vai digitar o código da disciplina escolhida. A posição colocada aqui vai ser [0][0] for(a=0; a<num; a++){ for(b=0; b<num; b++){ scanf("%d",&al[a].grade[a][b]); Aqui seria onde eu modificaria a posição que ela iria. Mas não esta funcionando. for(x=0; x<4; x++){ for(y=0; y<5; y++){ if(al_C[x].grade[x][y]==122){ al_C[x].grade[0][0]=122; al_C[x].grade[2][1]=122; } } }
  23. Consegui a parte de printar as matrizes conforme o aluno escolhe o problema é que o código não guarda a matriz para cada aluno. @devair1010 #include <stdio.h> #include <string.h> struct disciplinas { int codigo; char professor[20]; int c_Horaria; char h_Semanal[30]; }; struct registro { int matricula; char nome[20]; char sobrenome[20]; char email[40]; int l_Disciplinas; int grade[4][6]; }; int cont; void grade_al(struct disciplinas dis[5]){ dis[0].codigo=122; dis[1].codigo=127; dis[2].codigo=132; dis[3].codigo=143; dis[4].codigo=135; strcpy(dis[0].h_Semanal,"08:00"); strcpy(dis[1].h_Semanal,"10:00"); strcpy(dis[2].h_Semanal,"13:00"); strcpy(dis[3].h_Semanal,"15:00"); dis[0].c_Horaria=60; dis[1].c_Horaria=60; dis[2].c_Horaria=60; dis[3].c_Horaria=30; dis[4].c_Horaria=60; } int add_Aluno(struct registro al[3], struct disciplinas add_Dis[5], struct registro grade_T[4][6]){ int dis,x,y,guarda[5],cont=0,num,a,b; char resp; int volta,j; printf("\n\n"); printf("--------------------------------------\n"); printf("---voce selecionou adicionar aluno.---\n"); printf("--------------------------------------\n"); printf(" Lista de Disciplinas\n"); printf(" Codigo Nome\n\n"); printf("\n"); int passa; do{ int yy=1; printf("Digite seu nome:"); fflush(stdin); /*//Funcão de Cadastro do aluno*/ gets(al[cont].nome); printf("Digite seu Sobrenome:"); gets(al[cont].sobrenome); strcat(al[cont].nome, al[cont].sobrenome); printf("Digite sua Matricula:"); scanf("%d",&al[cont].matricula); printf("Digite seu e-mail:"); fflush(stdin); gets(al[cont].email); cont++; do{ volta=1; printf("Digite em quantas materias deseja se matricular:"); scanf("%d",&num); printf("Digite o codigo das diciplinas que voce deseja se matricular\n"); for(y=0; y<num; y++){ scanf("%d",&al[y].l_Disciplinas); for(j=0;j<num;j++){ if((al[y].l_Disciplinas == 127 && al[j].l_Disciplinas == 132 && j != y )|| al[y].l_Disciplinas ==135 && al[j].l_Disciplinas == 143) { printf("voce não pode se inscrever em duas disciplas de mesmo horario\n"); volta=0; al[y].l_Disciplinas=0; break; } else if(al[y].l_Disciplinas==122) { grade_T[0][1].grade[0][1]=122; grade_T[1][2].grade[1][2]=122; } else if(al[y].l_Disciplinas==127) { grade_T[2][2].grade[2][2]=127; grade_T[3][2].grade[3][2]=127; } else if(al[y].l_Disciplinas==132) { grade_T[2][2].grade[2][2]=132; grade_T[1][4].grade[1][4]=132; } else if(al[y].l_Disciplinas==143) { grade_T[0][5].grade[0][5]=143; } else if(al[y].l_Disciplinas==145) { grade_T[1][3].grade[1][3]=145; grade_T[0][5].grade[0][5]=135; } } } }while(volta != 1 ); printf("Deseja Cadastrar outro aluno? s/n:"); fflush(stdin); scanf("%c",&resp); }while(resp != 'n'); } void consulta(struct registro al_C[3],struct disciplinas dis[5], struct registro grade_T[4][6]){ int x=0,escolhe,a,b; char nome[20]; char salva[3]; int cont_L=0; int teste[3]; char resp; int matricula_N,salva_V; char string[3]; char horas[20]; printf("\n\n"); printf("--------------------------------------\n"); printf("---voce selecionou Consultar aluno.---\n"); printf("--------------------------------------\n"); printf("1.Pesquisa por Nome\n"); printf("2.Pesquisa por Matricula\n"); fflush(stdin); scanf("%d",&escolhe); if(escolhe ==1){ printf("Digite o nome do aluno:"); fflush(stdin); gets(nome); for(x=0; x<4; x++){ if(strcmp(al_C[x].nome, nome)==0){ salva_V=1; } } } else if(escolhe == 2) { printf("Digite a Matricula do aluno:"); fflush(stdin); scanf("%d",&matricula_N); for(x=0; x<4; x++) { if(al_C[x].matricula == matricula_N ){ /*//compara as duas matricular se são iguais se for ele printa a grade do aluno*/ salva_V=1; } } } if(salva_V == 1){ printf(" Segunda Terca Quarta Quinta Sexta\n"); for(a=0; a<4; a++){ for(b=0; b<6; b++){ if(grade_T[a][b].grade[a][b]==127 || grade_T[a][b].grade[a][b]==122 || grade_T[a][b].grade[a][b]==135 || grade_T[a][b].grade[a][b]==132 ||grade_T[a][b].grade[a][b]==143){ printf(" "); printf("[%d]", grade_T[a][b].grade[a][b]); }else{ printf(" "); printf("[---]"); } } printf("\n"); } } } int main(){ struct disciplinas curso[5]; struct registro alunos[3]; struct registro grade_T[4][6]; int escolha; do{ printf("\n\n"); printf(" -----------------------\n"); printf(" ------Bem Vindo!!------\n"); printf(" -----------------------\n"); printf("Escolha uma das opções abaixo\n"); printf("1. Adicionar aluno\n"); printf("2. Consultar aluno\n"); printf("3. Sair\n"); fflush(stdin); scanf("%d",&escolha); if(escolha == 1){ add_Aluno(alunos,curso,grade_T); } else if(escolha == 2) { consulta(alunos,curso, grade_T); } }while(escolha !=3); return 0; }
  24. @devair1010 Obrigado pela ajuda, mas irei te incomodar de novo, ele esta printando outros numeros e não printa os códigos das disciplinas dentro da matriz. O que eu quero fazer é que quando o aluno digite o código da disciplina ele mande esse código pra dentro da matriz. colocarei a mudanças que fiz com com aspas pra ficar melhor de enxergar. #include <stdio.h> #include <string.h> struct disciplinas { int codigo; char professor[20]; int c_Horaria; char h_Semanal[30]; }; struct registro { int matricula; char nome[20]; char sobrenome[20]; char email[40]; int l_Disciplinas; int grade[4][6]; }; int cont; void grade_al(struct registro grade_T[4][6],struct disciplinas dis[5]){ dis[0].codigo=122; dis[1].codigo=127; dis[2].codigo=132; dis[3].codigo=143; dis[4].codigo=135; strcpy(dis[0].h_Semanal,"08:00"); strcpy(dis[1].h_Semanal,"10:00"); strcpy(dis[2].h_Semanal,"13:00"); strcpy(dis[3].h_Semanal,"15:00"); dis[0].c_Horaria=60; dis[1].c_Horaria=60; dis[2].c_Horaria=60; dis[3].c_Horaria=30; dis[4].c_Horaria=60; int x,y; for(x=0; x<4; x++){ for(y=0; y<6; y++){ grade_T[0][1].grade[x][y]=dis[x].codigo; grade_T[1][2].grade[x][y]=dis[x].codigo; grade_T[2][2].grade[x][y]=dis[x].codigo; grade_T[3][2].grade[x][y]=dis[x].codigo; grade_T[2][2].grade[x][y]=dis[x].codigo; grade_T[1][4].grade[x][y]=dis[x].codigo; grade_T[0][5].grade[x][y]=dis[x].codigo; grade_T[1][3].grade[x][y]=dis[x].codigo; grade_T[0][5].grade[x][y]=dis[x].codigo; "grade_T[0][0].grade[x][y]=dis[0].h_Semanal;" " grade_T[1][0].grade[x][y]=dis[1].h_Semanal;" "grade_T[2][0].grade[x][y]=dis[2].h_Semanal;" "grade_T[3][0].grade[x][y]=dis[3].h_Semanal;" } } } int add_Aluno(struct registro al[3], struct disciplinas add_Dis[5], struct registro grade_T[4][6]){ int dis,x,y,guarda[5],cont=0,num,a,b; char resp; int volta,j; printf("\n\n"); printf("--------------------------------------\n"); printf("---voce selecionou adicionar aluno.---\n"); printf("--------------------------------------\n"); printf(" Lista de Disciplinas\n"); printf(" Codigo Nome\n\n"); printf("\n"); int passa; do{ int yy=1; printf("Digite seu nome:"); fflush(stdin); /*//Funcão de Cadastro do aluno*/ gets(al[cont].nome); printf("Digite seu Sobrenome:"); gets(al[cont].sobrenome); strcat(al[cont].nome, al[cont].sobrenome); printf("Digite sua Matricula:"); scanf("%d",&al[cont].matricula); printf("Digite seu e-mail:"); fflush(stdin); gets(al[cont].email); cont++; do{ volta=1; printf("Digite em quantas materias deseja se matricular:"); scanf("%d",&num); printf("Digite o codigo das diciplinas que voce deseja se matricular\n"); for(y=0; y<num; y++){ scanf("%d",&al[y].l_Disciplinas); for(j=0;j<num;j++){ if((al[y].l_Disciplinas == 127 && al[j].l_Disciplinas == 132 && j != y )|| al[y].l_Disciplinas ==135 && al[j].l_Disciplinas == 143) { printf("voce não pode se inscrever em duas disciplas de mesmo horario\n"); volta=0; al[y].l_Disciplinas=0; break; } } } "for(a=0;a<4;a++)" "for(b=0;b<6;b++){" "if(al[a].l_Disciplinas==add_Dis[a].codigo){" "grade_T[a][b].grade[a][b]=add_Dis[a].codigo;" } } }while(volta != 1 ); printf("Deseja Cadastrar outro aluno? s/n:"); fflush(stdin); scanf("%c",&resp); }while(resp != 'n'); } void consulta(struct registro al_C[3],struct disciplinas dis[5], struct registro grade_T[4][6]){ int x=0,escolhe,a,b; char nome[20]; char salva[3]; int cont_L=0; int teste[3]; char resp; int matricula_N,salva_V; char string[3]; char horas[20]; printf("\n\n"); printf("--------------------------------------\n"); printf("---voce selecionou Consultar aluno.---\n"); printf("--------------------------------------\n"); printf("1.Pesquisa por Nome\n"); printf("2.Pesquisa por Matricula\n"); fflush(stdin); scanf("%d",&escolhe); if(escolhe ==1){ printf("Digite o nome do aluno:"); fflush(stdin); gets(nome); for(x=0; x<4; x++){ if(strcmp(al_C[x].nome, nome)==0){ salva_V=1; } } } else if(escolhe == 2) { printf("Digite a Matricula do aluno:"); fflush(stdin); scanf("%d",&matricula_N); for(x=0; x<4; x++) { if(al_C[x].matricula == matricula_N ){ /*//compara as duas matricular se são iguais se for ele printa a grade do aluno*/ salva_V=1; } } } if(salva_V == 1){ printf(" Segunda Terca Quarta Quinta Sexta\n"); for(a=0; a<4; a++){ for(b=0; b<6; b++){ printf("[%d]",grade_T[a][b].grade[a][b]); } printf("\n"); } } } int main(){ struct disciplinas curso[5]; struct registro alunos[3]; struct registro grade_T[4][6]; int escolha; do{ printf("\n\n"); printf(" -----------------------\n"); printf(" ------Bem Vindo!!------\n"); printf(" -----------------------\n"); printf("Escolha uma das opções abaixo\n"); printf("1. Adicionar aluno\n"); printf("2. Consultar aluno\n"); printf("3. Sair\n"); fflush(stdin); scanf("%d",&escolha); if(escolha == 1){ add_Aluno(alunos,curso,grade_T); } else if(escolha == 2) { consulta(alunos,curso, grade_T); } }while(escolha !=3); return 0; }
  25. @devair1010 qual argumento eu coloco na função consulta dentro da main? alunos de novo?

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!