Ir ao conteúdo
  • Cadastre-se

larafml

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

Reputação

0
  1. Fala fala clã! Estou com uma dúvida aqui. O programa é simples, o usuário entra com um número de pessoas, e logo depois, a idade de cada uma dessas pessoas. Se for par, essa pessoa é mulher, e vai pro vetor de mulher, se for impar, vai pro vetor de homem. Ai então os vetores são ordenados. Minha dúvida está depois disso. Eu preciso então, retornar se todas as mulheres fazer par com um homem mais velho que elas. Tipo, a Maria de 20, faz par com o Pedro de 21. A Angela de 28, faz par com o Marcio de 33. Se todas as mulheres fizerem par, eu retorno "sucesso", se uma delas ficou sem par, eu retorno "fracasso". Sobrar homem não faz diferença. HELP PLEASE. Coloquei um comentário no código de onde minha dúvida está! #include <stdio.h>#include <stdlib.h>#define limpa_tela system("cls") //limpa tela#define MAX 1000main(){int valor = 0, numT = 0;int i = 0, j = 0, x = 0, y = 0, troca = 0, count = 0, m = 0, l = 0, par = 0, contf = 0;int vetH[MAX];int vetM[MAX];printf("Quantidade de convidados ");scanf("%d", &numT); for(i=0; i<numT; i++) { printf("\nInsira a idade do convidado: "); scanf("%d", &valor); if(valor >= 18 || valor <=100) { if(valor%2==0){ vetM[m] = valor; m++; } else{ vetH[j] = valor; j++; } } } for(x = 0; x < MAX-1; x++){ for(y = 1; y < MAX+1; y++){ if(vetM[x] < vetM[y]){ troca = vetM[y]; vetM[y] = vetM[x]; vetM[y] = troca; } } } for(x = 0; x < MAX-1; x++){ for(y = 1; y < MAX+1; y++){ if(vetH[x] < vetH[y]){ troca = vetH[y]; vetH[y] = vetH[x]; vetH[y] = troca; } } }//DÚVIDAS COMEÇAM AQUI. for(l=0;l<numT;l++) { for(m=0;m<numT;m++) { if(vetH[j]!=0 && vetM[m]!=0) { if(vetH[j]>vetM[m]) { par++; vetH[j]=0; vetM[m]=0; } } } } if(contf==par) { printf("Sucesso"); }else{ printf("fracasso"); }}
  2. Oba! Beleza galera? Preciso de uma força com um problema aqui. É o seguinte, eu tenho que fazer um baile em c.. E esse baile funciona da seguinte maneira: Cada mulher só dança com homem que seja no mínimo 1 ano mais velho que ela. Tipo, a Dona Beth de 51 anos, só aceita dançar com José se ele no mínimo tiver 52 anos. E para piorar a situação, se uma mulher ficar sem par de dança, todas as outras se recusam a dançar. Eu preciso então ver se a festa vai ser ou não um sucesso, e para isso, preciso verificar a lista de convidados Sucesso representaria o fato de todas as mulheres terem par (mesmo que algum homem fique sem dançar), e fracasso significaria que alguma mulher ficou sem companheiro de dança. E ainda, os homens possuem só idades impares e as mulheres só idades pares. Então como eu faço, a festa tem que ter no mínimo 2 pessoas, e no máximo 1000. E as idades precisam ser maior que 18 e menor que 100.. E ai, a partir da verificação das idades para ver se deu bom ou se deu ruim, eu preciso informar se a festa será um sucesso (S) ou um fracasso (F). Exemplo de festa que foi um sucesso: 45 44 58 61 57. Estava pensando em por este problema neste código de lista duplamente encadeada: Ou em uma pilha, adaptada, não sei D; Alguém me socorre. No caso do código abaixo, teríamos a criação da lista, o inserir e o verificar. Remover e afins não é necessário. include<stdio.h># include<stdlib.h># include<string.h># include<ncurses.h># include<curses.h># include<ctype.h>//#define MALLOC(x) ((x *) malloc (sizeof(x)))typedef struct ElemListaint{ int chave; struct ElemListaint *ant, *prox;}Listaint;void inicializa(Listaint **l){ *l = NULL;}int consulta(Listaint *l, int x){ Listaint *p; int achou = 1; p = l; while(p){ if( p -> chave == x){ //printf("%d", achou); return(1); }else p = p -> prox; } //printf("%d", !achou); return (0);}Listaint *retornaApontElem(Listaint *l, int x){ int achou = 0; while((l != NULL) && (!achou)){ if(l -> chave == x) achou = 1; else l = l -> prox; } return (l);}void imprime(Listaint *l){ if(l == NULL) printf("\nLista Vazia!"); else{ printf("\nLista de Inteiros: "); while(l){ printf("%d ", l -> chave); l = l -> prox; } } //printf("\n\nPressione Tecla... "); getchar(); }int insere(Listaint **l, int x){ Listaint *p; //int inserido = 1; if(!consulta(*l, x)){ p = ((Listaint *)malloc(sizeof(Listaint))); p -> chave = x; p -> ant = NULL; p -> prox = *l; if ((*l) != NULL) (*l) -> ant = p; *l = p; return(1); }else return (0);}void remover(Listaint **l, int x){ Listaint *p; int achou = 0; p = retornaApontElem(*l, x); if(p != NULL){ if(p -> prox != NULL) p -> prox -> ant = p -> ant; if(p -> ant != NULL) p -> ant -> prox = p -> prox; else (*l) = p -> prox; free(p); achou = 1; } if(achou){ printf("\nElemento Removido com Sucesso!\n"); usleep(1000000); }else{ printf("\nElemento nao Encontrado!\n"); usleep(1000000); }}int main(){ char op[1]; Listaint *l; int a; inicializa(&l); for(;{ printf("\n\n"); system("clear"); printf("Programa Lista Encadeada!\n\n"); printf("a. Insere na Lista;\n"); printf("b. Remove da Lista;\n"); printf("c. Consulta na Lista;\n"); printf("d. Imprime Lista;\n"); printf("s. SAIR.\n\n"); printf("OPCAO: "); gets(op); switch(toupper(op[0])){ case 'A':{ fflush(stdin); //system("clear"); printf("\nDigite o Elemento a Inserir: "); scanf("%d", &a); a = insere(&l, a); //****************************************** if(a) printf("\nElemento Inserido com Sucesso!\n"); else printf("\nElemento ja existe!\n"); usleep(1000000); }break; case 'B':{ fflush(stdin); //system("clear"); if(l == NULL){ printf("\nLista Vazia!"); getchar(); }else{ printf("\nDigite o Elemento a Remover: "); scanf("%d", &a); remover(&l, a); } }break; case 'C':{ fflush(stdin); if(l == NULL){ printf("\nLista Vazia!"); getchar(); }else{ printf("\nDigite o Elemento a Consultar: "); scanf("%d", &a); a = consulta(l, a); //******************************************* //printf("{FONTE}33[x;yH"); if(a) printf("\nValor encontrado na lista!!!\n"); else printf("\nValor nao encontrado na lista!!!\n"); usleep(1000000); if (a == consulta(l, a)) fflush(stdin); } }break; case 'D':{ imprime(l); }break; case 'S':{ fflush(stdin); printf("\nTem certeza? (S/N) "); gets(op); if(toupper(op[0]) == 'S'){ system("clear"); exit(0); } }break; default:{ fflush(stdin); if(toupper(op[0]) != 'S') printf("Opcao incorreta, digite novamente!"); //usleep(1000000); }break; } }//while(toupper(op[0]) != 'S'); return (0);}
  3. Oba! Beleza galera? Preciso de uma força com um problema aqui. É o seguinte, eu tenho que fazer um baile em c.. E esse baile funciona da seguinte maneira: Cada mulher só dança com homem que seja no mínimo 1 ano mais velho que ela. Tipo, a Dona Beth de 51 anos, só aceita dançar com José se ele no mínimo tiver 52 anos. E para piorar a situação, se uma mulher ficar sem par de dança, todas as outras se recusam a dançar. Eu preciso então ver se a festa vai ser ou não um sucesso, e para isso, preciso verificar a lista de convidados Sucesso representaria o fato de todas as mulheres terem par (mesmo que algum homem fique sem dançar), e fracasso significaria que alguma mulher ficou sem companheiro de dança. E ainda, os homens possuem só idades impares e as mulheres só idades pares. Então como eu faço, a festa tem que ter no mínimo 2 pessoas, e no máximo 1000. E as idades precisam ser maior que 18 e menor que 100.. E ai, a partir da verificação das idades para ver se deu bom ou se de ruim, eu preciso informar se a festa será um sucesso (S) ou um fracasso (F). Pensei em fazer uma lista duplamente encadeada, não sei, estou com muitas dúvidas, pois não sei implementar essa fila, mas eu iria procurar na net.. Se alguém puder me ajudar, agradeço!
  4. Salve salve clã! Preciso de uma ajuda. Preciso que alguém comente pra mim a função de inserir, pois estou com dificuldades de entender, e preciso saber passo a passo como insere. Então, por favor <3 #include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <fcntl.h>#define m 2#define mm 4#define reservado "cls"typedef int TipoChave;typedef struct{ TipoChave Chave;} Registro;typedef struct Pagina_str *Apontador;typedef struct Pagina_str{ int n; Registro r[mm]; Apontador p[mm + 1];} Pagina;typedef Apontador TipoDicionario;void Inicializa(TipoDicionario *Dicionario){ *Dicionario = NULL;} /* Inicializa */void Pesquisa(Registro *x, Apontador Ap){ int i; if (Ap == NULL) { printf("Erro: Registro nao esta presente\n"); getchar(); getchar(); return; } i = 1; while (i < Ap->n && x->Chave > Ap->r[i - 1].Chave) i++; if (x->Chave == Ap->r[i - 1].Chave) { *x = Ap->r[i - 1]; return; } if (x->Chave < Ap->r[i - 1].Chave) Pesquisa(x, Ap->p[i - 1]); else Pesquisa(x, Ap->p[i]);} /* Pesquisa */void InsereNaPagina(Apontador Ap, Registro Reg, Apontador ApDir){ int k; int NaoAchouPosicao; k = Ap->n; NaoAchouPosicao = k > 0; while (NaoAchouPosicao) { if (Reg.Chave >= Ap->r[k - 1].Chave) { NaoAchouPosicao = 0; break; } Ap->r[k] = Ap->r[k - 1]; Ap->p[k + 1] = Ap->p[k]; k--; if (k < 1) NaoAchouPosicao = 0; } Ap->r[k] = Reg; Ap->p[k + 1] = ApDir; Ap->n++;} /*InsereNaPagina*/void Ins(Registro Reg, Apontador Ap, int *Cresceu, Registro *RegRetorno, Apontador *ApRetorno){ Apontador ApTemp; int i, j; if (Ap == NULL) { *Cresceu = 1; *RegRetorno = Reg; *ApRetorno = NULL; return; } i = 1; while (i < Ap->n && Reg.Chave > Ap->r[i - 1].Chave) i++; if (Reg.Chave == Ap->r[i - 1].Chave) { printf(" Erro: Registro ja esta presente\n"); getchar(); getchar(); *Cresceu = 0; return; } if (Reg.Chave < Ap->r[i - 1].Chave) Ins(Reg, Ap->p[i - 1], Cresceu, RegRetorno, ApRetorno); else Ins(Reg, Ap->p[i], Cresceu, RegRetorno, ApRetorno); if (!*Cresceu) return; if (Ap->n < mm) { /* Pagina tem espaco */ InsereNaPagina(Ap, *RegRetorno, *ApRetorno); *Cresceu = 0; return; } /* Overflow: Pagina tem que ser dividida */ ApTemp = (Apontador) malloc(sizeof(Pagina)); ApTemp->n = 0; ApTemp->p[0] = NULL; if (i <= m + 1) { InsereNaPagina(ApTemp, Ap->r[mm - 1], Ap->p[mm]); Ap->n--; InsereNaPagina(Ap, *RegRetorno, *ApRetorno); } else InsereNaPagina(ApTemp, *RegRetorno, *ApRetorno); for (j = m + 2; j <= mm; j++) InsereNaPagina(ApTemp, Ap->r[j - 1], Ap->p[j]); Ap->n = m; ApTemp->p[0] = Ap->p[m + 1]; *RegRetorno = Ap->r[m]; *ApRetorno = ApTemp;} /*Ins*/void Insere(Registro Reg, Apontador *Ap){ int Cresceu; Registro RegRetorno; Apontador ApRetorno; Apontador ApTemp; Ins(Reg, *Ap, &Cresceu, &RegRetorno, &ApRetorno); if (Cresceu) { /* Arvore cresce na altura pela raiz */ ApTemp = (Apontador) malloc(sizeof(Pagina)); ApTemp->n = 1; ApTemp->r[0] = RegRetorno; ApTemp->p[1] = ApRetorno; ApTemp->p[0] = *Ap; *Ap = ApTemp; }} /*Insere*/void Reconstitui(Apontador ApPag, Apontador ApPai, int PosPai, int *Diminuiu){ Apontador Aux; int DispAux, j; if (PosPai < ApPai->n) { /* Aux = Pagina a direita de ApPag */ Aux = ApPai->p[PosPai + 1]; DispAux = (Aux->n - m + 1) / 2; ApPag->r[ApPag->n] = ApPai->r[PosPai]; ApPag->p[ApPag->n + 1] = Aux->p[0]; ApPag->n++; if (DispAux > 0) { /* Existe folga: transfere de Aux para ApPag */ for (j = 1; j < DispAux; j++) InsereNaPagina(ApPag, Aux->r[j - 1], Aux->p[j]); ApPai->r[PosPai] = Aux->r[DispAux - 1]; Aux->n -= DispAux; for (j = 0; j < Aux->n; j++) Aux->r[j] = Aux->r[j + DispAux]; for (j = 0; j <= Aux->n; j++) Aux->p[j] = Aux->p[j + DispAux]; *Diminuiu = 0; } else { /* Fusao: intercala Aux em ApPag e libera Aux */ for (j = 1; j <= m; j++) InsereNaPagina(ApPag, Aux->r[j - 1], Aux->p[j]); free(Aux); for (j = PosPai + 1; j < ApPai->n; j++) { /* Preenche vazio em ApPai */ ApPai->r[j - 1] = ApPai->r[j]; ApPai->p[j] = ApPai->p[j + 1]; } ApPai->n--; if (ApPai->n >= m) *Diminuiu = 0; } } else { /* Aux = Pagina a esquerda de ApPag */ Aux = ApPai->p[PosPai - 1]; DispAux = (Aux->n - m + 1) / 2; for (j = ApPag->n; j >= 1; j--) ApPag->r[j] = ApPag->r[j - 1]; ApPag->r[0] = ApPai->r[PosPai - 1]; for (j = ApPag->n; j >= 0; j--) ApPag->p[j + 1] = ApPag->p[j]; ApPag->n++; if (DispAux > 0) { /* Existe folga: transfere de Aux para ApPag */ for (j = 1; j < DispAux; j++) InsereNaPagina(ApPag, Aux->r[Aux->n - j], Aux->p[Aux->n - j + 1]); ApPag->p[0] = Aux->p[Aux->n - DispAux + 1]; ApPai->r[PosPai - 1] = Aux->r[Aux->n - DispAux]; Aux->n -= DispAux; *Diminuiu = 0; } else { /* Fusao: intercala ApPag em Aux e libera ApPag */ for (j = 1; j <= m; j++) InsereNaPagina(Aux, ApPag->r[j - 1], ApPag->p[j]); free(ApPag); ApPai->n--; if (ApPai->n >= m) *Diminuiu = 0; } }} /* Reconstitui */void Antecessor(Apontador Ap, int Ind, Apontador ApPai, int *Diminuiu){ if (ApPai->p[ApPai->n] != NULL) { Antecessor(Ap, Ind, ApPai->p[ApPai->n], Diminuiu); if (*Diminuiu) Reconstitui(ApPai->p[ApPai->n], ApPai, ApPai->n, Diminuiu); return; } Ap->r[Ind - 1] = ApPai->r[ApPai->n - 1]; ApPai->n--; *Diminuiu = ApPai->n < m;} /* Antecessor */void Ret(TipoChave Ch, Apontador *Ap, int *Diminuiu){ int Ind, j; Apontador WITH; if (*Ap == NULL) { printf("Erro: registro nao esta na arvore\n"); getchar(); getchar(); *Diminuiu = 0; return; } WITH = *Ap; Ind = 1; while (Ind < WITH->n && Ch > WITH->r[Ind - 1].Chave) Ind++; if (Ch == WITH->r[Ind - 1].Chave) { if (WITH->p[Ind - 1] == NULL) { /* Pagina folha */ WITH->n--; *Diminuiu = WITH->n < m; for (j = Ind; j <= WITH->n; j++) { WITH->r[j - 1] = WITH->r[j]; WITH->p[j] = WITH->p[j + 1]; } return; } Antecessor(*Ap, Ind, WITH->p[Ind - 1], Diminuiu); if (*Diminuiu) Reconstitui(WITH->p[Ind - 1], *Ap, Ind - 1, Diminuiu); return; } if (Ch > WITH->r[Ind - 1].Chave) Ind++; Ret(Ch, &WITH->p[Ind - 1], Diminuiu); if (*Diminuiu) Reconstitui(WITH->p[Ind - 1], *Ap, Ind - 1, Diminuiu);} /* Ret */void Retira(TipoChave Ch, Apontador *Ap){ int Diminuiu; Apontador Aux; Ret(Ch, Ap, &Diminuiu); if (Diminuiu && (*Ap)->n == 0) { /* Arvore diminui na altura */ Aux = *Ap; *Ap = Aux->p[0]; free(Aux); }} /* Retira */void Imprime(Apontador p, int Nivel){ int i; if (p == NULL) return; for (i = 1; i <= Nivel; i++) printf(" "); for (i = 0; i < p->n; i++) printf("%4d", p->r[i].Chave); putchar('\n'); for (i = 0; i <= p->n; i++) Imprime(p->p[i], Nivel + 1);}int main(){ Apontador *arv; Registro reg; char tecla; system(reservado); arv=(Apontador*) malloc(sizeof(Apontador)); Inicializa(arv); system(reservado); printf("MENU DE opções\n"); printf("--------------\n"); while(1) { system(reservado); printf("MENU DE opções\n"); printf("--------------\n"); printf("1. Insere\n"); printf("2. Remocao\n"); printf("3. Visualizar\n");// printf("4. Pesquisa\n"); printf("5. Sair\n"); printf("--> "); scanf("%c", &tecla); if (tecla=='5') break; switch(tecla) { case '1': while(1) { system(reservado); printf("INSERCAO\n"); printf("--------\n"); printf("Digite o valor da chave a ser inserida: (999 para finalizar)\n--> "); scanf("%d", &reg.Chave); if (reg.Chave==999) break; Insere(reg, arv); } break; case '2': while(1) { system(reservado); printf("REMOCAO\n"); printf("-------\n"); printf("Digite o valor da chave a ser removida: (999 para finalizar)\n--> "); scanf("%d", &reg.Chave); if (reg.Chave==999) break; Retira(reg.Chave, arv); } break; case '3': system(reservado); printf("IMPRESSAO\n"); printf("---------\n"); Imprime(*arv, mm); getchar(); getchar(); break; } } getchar();

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...