Wilkyn Fernandes Taborda
Members-
Total de itens
73 -
Registro em
-
Última visita
Reputação
0 ComumSobre Wilkyn Fernandes Taborda
Contato
-
Twitter
@FernandesWilkyn
-
Esse programa não faz sentido por que para achar um padrão em um texto nós fazemos a comparação de igualdade entre um conjunto de caractéres e o texto e não deslocamento de bits SHIFT AND. Nesse caso eu preciso comparar caractér com caractér ou seja byte com byte e não bit com bit.
-
Lista simplesmente encadeada tendo como argumento outra estrutura com dados
Wilkyn Fernandes Taborda respondeu ao tópico de Fah em C/C++
Fah em: while ( nome!= '\0' ){ Al-> nome= nome; i ++; } Al-> nome= NULL; Dá erro pois faltam os índices que apontam qual caractére se está a copiar. Faz-se: while ( nome[i]!= '\0' ){ Al-> nome[i]= nome[i]; i ++; } Al-> nome[i]= NULL; A função cria está errada. Ela retorna o valor do ponteiro que foi passado como argumento sem modificar o valor da região para aonde ele aponta. Isso não é erro porém redundante. O erro está em que a nova lista criada pela função se perde na memória após a função terminar e não se tem controle sobre a nova lista criada. O programa trava ao executar por que na função principal falta inicializar a variável l1 com o valor nulo para que a função de inserção ordenada saiba que a lista está vazia. É: l1=NULL; A função de inserção ordenada é redundante pois além de inserir o novo elemento na lista ainda retorna um ponteiro para essa mesma lista. Não está errado mas isso se torna desnecessário a partir da inserção do segundo elemento da lista e em diante até que se resolva adicionar algum com número de matrícula menor do que todos os outros. O programa vai travar toda vez que inserir um valor com número de matrícula menor do que todos os outros que já tem na lista. Isso por que o ponteiro próximo apontado pelo ponteiro novo na função inserção ordenada está recebendo como apontamento outro ponteiro próximo de um valor nulo que não existe e o ponteiro aux da mesma função está sendo ordenado em seu membro apontado ponteiro próximo a apontar para algo que ele não pode por o valor de aux ser nulo e seus membros apontados não existirem. Para resolver isso coloca-se uma variável contadora de elementos da lista com número de matrícula menor do que o que está sendo inserido. Se o resultado do contador for 0 aponta-se o início da lista para o novo elemento e o ponteiro próximo do novo elemento para a lista atual aonde já estarão os outros elementos consecutivos. A função imprime fica para sempre imprimindo somente a primeira matrícula repetidas vezes por que não foi colocado a linha de código que faz o ponteiro p avançar para o próximo da lista que é: p=p->prox; Nenhuma função da biblioteca string é usada. A linha que a adiciona pode ser removida. O mesmo programa porém com essas modificações que eu disse fica: #include <stdio.h> struct aluno { int matricula ; char nome [ 100 ]; float media ; }; typedef struct aluno Aluno ; struct no { Aluno * dados ; struct no * prox ; }; typedef struct no No; No* ins_ordenado ( No* l , int mat , char* nome , float nota ){ int contadora; Aluno * Al=( Aluno *)malloc ( sizeof( Aluno )); No* novo =( No*)malloc( sizeof ( No)); int i = 0 ; Al-> matricula = mat ; while ( nome[i]!= '\0' ){ Al-> nome[i]= nome[i]; i ++; } Al-> nome[i]= NULL; Al-> media = nota; novo -> dados = Al; No* p = l ; No* aux = NULL; if( l ==NULL){ novo -> prox= l ; return novo ; } contadora=0; while ( p != NULL&&p -> dados -> matricula < Al-> matricula ){ aux = p ; p = p -> prox; contadora++; } if(contadora>0){ novo -> prox= aux -> prox; aux -> prox= novo; } else{ novo->prox=l; l=novo; return l; } if( p ==NULL){ novo -> prox= NULL; } return l ; } void imprime ( No* l ){ No* p ; printf ( "turma 1:\n" ); for ( p = l ; p != NULL; p -> prox){ printf ( "Matricula: %d\t Nome: %s Nota:%f\n" , p -> dados -> matricula , p -> dados -> nome, p -> dados -> media ); p=p->prox; } printf ( "\n" ); } int vazia ( No* l ){ return( l ==NULL); } int main (){ No* l1; l1=NULL; l1 = ins_ordenado ( l1 , 1 , "Maria" , 5 ); ins_ordenado ( l1 , 2 , "Joao" , 10 ); ins_ordenado ( l1 , 3 , "Jose" , 6 ); ins_ordenado ( l1 , 5 , "Joaquim" , 7 ); ins_ordenado ( l1 , 4 , "Manoel" , 8 ); l1=ins_ordenado ( l1 , 0 , "Felipe" , 9 ); printf( "vazia? %d" , vazia ( l1 )); imprime(l1); system("pause"); return 0 ; }- 2 respostas
-
- simples
- lista encadeada
-
(e mais 1 )
Tags:
-
Alguém consegue entender esse enunciado ?
Wilkyn Fernandes Taborda respondeu ao tópico de LRock98 em C/C++
Na verdade ela quer que ele faça um algoritmo na linguagem C. O que pede é um programa que gera a tabela de quanto será o lucro da compania de teatro de acordo com o preço que essa resolver vender os ingressos dentro da faixa de valores especificada. int main(){ int preco,quantos; printf("Preco do ingresso quantos vai vender lucro\n"); for(preco=48,quantos=350;preco>=22;preco-=2,quantos+=17) printf("%d reais %d %d reais\n",preco,quantos,(preco*quantos)-5600); system("pause"); } -
pedir dois numeros ao utilizador e meter em ordem crescente
Wilkyn Fernandes Taborda respondeu ao tópico de cristian2000 em C/C++
int main(){ int numero1,numero2,auxiliar; printf("Digite o primeiro numero:"); scanf("%d",&numero1); printf("Digite o segundo:"); scanf("%d",&numero2); if(numero1>numero2){ auxiliar=numero1; numero1=numero2; numero2=auxiliar; } printf("Os numeros em ordem crescente fica: %d %d.",numero1,numero2); } -
Em uma variável do tipo struct lista o ponteiro próximo vai receber o endereço de memória de uma outra variável também do tipo struct lista para apontá-la. O elemento apontado também tem nele um ponteiro próximo que vai apontar para um outro elemento de mesmo tipo e assim consecutivamente quantos elementos quiser que tenha na lista. Esse seu código está errado por que ele está reservando memória para um elemento com tamanho em bytes 10 vezes maior do que o necessário somente para o próximo elemento da lista que daí sim vai reservar memória para o próximo e assim por diante. Isso se deve ao fato da alocação estar sendo multiplicada por 10. Ao tirar a multiplicação por 10 fica certo.
-
/*Antes de executar o programa abaixo pela primeira vez crie um arquivo de texto vazio chamado "carros" na mesma pasta do executavel.*/ #include<stdio.h> int main(){ FILE *arquivo; int resposta=0,diaria,totaldecarros,contacarros,i; char nomedocarro[20],placa[8],caractere,textotemporario[1000]; while(resposta!=3){ printf("O que deseja fazer ?"); printf("\n1.Cadastrar carro"); printf("\n2.Alugar carro"); printf("\n3.Sair"); scanf("%d",&resposta); if(resposta==1){ printf("Digite o nome do carro:"); scanf("%s",nomedocarro); printf("Digite a placa:"); scanf("%s",placa); printf("Digite o valor da diaria:"); scanf("%d",&diaria); arquivo=fopen("carros.txt","a"); fprintf(arquivo,"%d ",1); fprintf(arquivo,"%s ",placa); fprintf(arquivo,"%s ",nomedocarro); fprintf(arquivo,"%d\n",diaria); fclose(arquivo); } else if(resposta==2){ arquivo=fopen("carros.txt","r"); totaldecarros=0; i=0; while(1){ caractere= fgetc(arquivo); if(caractere=='\n'){ printf(" %d",totaldecarros+1); totaldecarros++; } if(caractere!=EOF){ printf("%c",caractere); textotemporario[i]=caractere; i++; } else{ textotemporario[i]='\0'; break; } } if(!totaldecarros) printf("Nao ha carros cadastrados."); else{ printf("Digite o numero a direita do valor da diaria do carro que quer alugar:"); scanf("%d",&resposta); if((resposta<1)||(resposta>totaldecarros)){ printf("Numero invalido."); fclose(arquivo); } else{ fclose(arquivo); arquivo=fopen("carros.txt","w"); i=0; contacarros=1; while(contacarros!=resposta){ if(textotemporario[i]=='\n') contacarros++; i++; } textotemporario[i]='0'; fprintf(arquivo,"%s",textotemporario); fclose(arquivo); } if(resposta==3) resposta=0; } } } system("pause"); }
-
O valor da diária já é estipulado em 100,00 não precisa ler ele de novo. int grupo,dias; printf ( "\t Valor da diaria: R$ 100,00 \n" ); printf ( "\t Quantos dias voce pretende ficar com o carro ? \n" ); scanf("%d",&dias); printf ( "\t Parceiros da ONG tem 5 porcento de desconto no valor total" ); printf ( "\t idosos tem 10 porcento de desconto no valor total" ); printf ( "\t informa qual grupo esse usuario se enquadra" ); printf ( "\t 1.Idoso, 2.parceiro ou 3.nenhum ?: " ); scanf("%d",&grupo); if(grupo==1) produto=(100-(0.1*100))*dias; else if(grupo==2) produto=(100-(0.05*100))*dias; else produto=100*dias; printf ( "\t Seu aluguel vai ficar vai no valor de R$%.000f \n" , produto ); printf ( "\t Deseja alugar o carro: \n" ); printf ( "\t (1) SIM \n" ); printf ( "\t (2) NAO \n" ); scanf ( "%i" ,& sn ); if ( sn == 1 ) { printf ( "\t Seu carro ja esta liberado. \n" ); printf ( "\t Volte Sempre. \n" ); } else if ( sn == 2 ) { printf ( "\t Seu carro nao esta liberado. \n" ); printf ( "\t Tenha um Bom Dia. \n" ); }
-
agenda Agenda de compromissos em C
Wilkyn Fernandes Taborda respondeu ao tópico de Lucas Lock em C/C++
As opções 2 e 3 fazem a mesma coisa. struct compromisso{ char descricao[100]; int dia,mes,ano; }compromissos[100]; int main(){ int opcao=1,totaldecompromissos=0,i,diatemporario,mestemporario,anotemporario,numero; while(opcao!=6){ printf("Digite a opcao:"); printf("\n1.Cadastrar compromisso"); printf("\n2.Consultar compromissos por data"); printf("\n3.Listar todos os compromissos de uma data"); printf("\n4.Listar todos os compromissos de um ano"); printf("\n5.Remover compromisso"); printf("\n6.Sair"); scanf("%d",&opcao); if(opcao==1){ printf("Digite a data do compromisso:"); printf("\nDia:"); scanf("%d",&compromissos[totaldecompromissos].dia); printf("\nMes:"); scanf("%d",&compromissos[totaldecompromissos].mes); printf("\nAno:"); scanf("%d",&compromissos[totaldecompromissos].ano); printf("\nDigite a descricao do compromisso:"); scanf("%*c%[^\n]%*c",compromissos[totaldecompromissos].descricao); totaldecompromissos++; } else if((opcao==2)||(opcao==3)){ printf("Digite a data do compromisso:"); printf("\nDia:"); scanf("%d",&diatemporario); printf("\nMes:"); scanf("%d",&mestemporario); printf("\nAno:"); scanf("%d",&anotemporario); for(i=0;i<totaldecompromissos;i++) if((diatemporario==compromissos[i].dia)&&(mestemporario==compromissos[i].mes)&&(anotemporario==compromissos[i].ano)) printf("\n%s\n",compromissos[i].descricao); } else if(opcao==4){ printf("\nDigite o ano:"); scanf("%d",&anotemporario); for(i=0;i<totaldecompromissos;i++) if(anotemporario==compromissos[i].ano){ printf("\nDia: %d\n",compromissos[i].dia); printf("Mes: %d\n",compromissos[i].mes); printf("Descricao: %s\n",compromissos[i].descricao); } } else if(opcao==5){ for(i=0;i<totaldecompromissos;i++){ printf("\nNumero: %d\n",i+1); printf("Dia: %d\n",compromissos[i].dia); printf("Mes: %d\n",compromissos[i].mes); printf("Descricao: %s\n",compromissos[i].descricao); } printf("\nDigite o numero do compromisso que deseja remover:"); scanf("%d",&numero); for(i=(numero-1);i<totaldecompromissos;i++){ compromissos[i].dia=compromissos[i+1].dia; compromissos[i].mes=compromissos[i+1].mes; compromissos[i].ano=compromissos[i+1].ano; strcpy(compromissos[i].descricao,compromissos[i+1].descricao); } totaldecompromissos--; } else if(opcao==6){ } else{ printf("Opcao invalida.\n"); } } system("pause"); } -
Como adicionar pontuação em número inteiro usando sprintf
Wilkyn Fernandes Taborda respondeu ao tópico de carolOL em C/C++
Você pode criar uma rotina que insere os pontos entre as casas decimais na hora de mostrar na tela. void imprimecompontos(char* texto){ int tamanho=strlen(texto),i,modulo; modulo=(tamanho%3); if(!modulo) modulo+=3; for(i=0;i<tamanho;i++){ if((i==modulo)&&(i)){ printf("%c",'.'); modulo+=3; } printf("%c",texto[i]); } } int main (){ char texto[20]; int valor=10000000; sprintf(texto,"%d",valor); imprimecompontos(texto); system("pause"); } -
A enumeração com os números dos dias da semana nesse programa é desnecessária pois no array de strings com os nomes dos dias o índice desse array já é esses números. #include<string.h> enum semana{domingo=0,segunda=1,terca=2,quarta=3,quinta=4,sexta=5,sabado=7};//Dispensavel. Pode ser retirado do programa. char nomesdosdias[7][8]; int main(){ int diadomes, diadasemana; strcpy(nomesdosdias[0],"domingo"); strcpy(nomesdosdias[1],"segunda"); strcpy(nomesdosdias[2],"terca"); strcpy(nomesdosdias[3],"quarta"); strcpy(nomesdosdias[4],"quinta"); strcpy(nomesdosdias[5],"sexta"); strcpy(nomesdosdias[6],"sabado"); printf("Digite o dia do mes:"); scanf("%d",&diadomes); printf("Digite o dia da semana:"); printf("\n1.Domingo"); printf("\n2.segunda"); printf("\n3.terca"); printf("\n4.quarta"); printf("\n5.quinta"); printf("\n6.sexta"); printf("\n7.sabado"); scanf("%d",&diadasemana); while(diadomes>1){ diadomes--; if(diadasemana>1) diadasemana--; else diadasemana=7; } printf("O primeiro dia do mes e: %s",nomesdosdias[diadasemana-1]); system("pause"); }
-
Na rotina de leitura e armazenamento dos estilistas falta o índice do vetor de estilistas e o mesmo acontece toda vez que o programa acessa o vetor de roupas ou seja, falta o índice que indica a posição de cada roupa na memória. estilistas . nome fica: estilistas[i]. nome é roupas.codigo fica roupas[i].codigo No cadastro das roupas ao tentar cadastrar ele sempre diz "Estação/Roupa não cadastrada" por que as variáveis roupas_primavera e roupas_outono foram inicializadas e sempre serão iguais a 0 fazendo com que o teste condicional que verifica a estação digitada sempre dê falso e a variável i nunca seja incrementada entrando em um loop infinito que faz com que o programa volte sempre no mesmo menu de cadastro de roupas e nunca avance adiante não importa o valor que se digite. Nesse caso o erro não é no cadastro das estações pois essas foram cadastradas corretamente.
-
Ajuda em fila e pilha - linguagem c
Wilkyn Fernandes Taborda respondeu ao tópico de Luísa Brandão em C/C++
Tive que fazer algumas adaptações como por exemplo criar as pilhas com uma posição a mais pra sinalizar que as pilhas estão vazias por que com esses parâmetros nao há como mudar os valores dos ponteiros de pilha entre as chamadas de funções. #include<stdlib.h> typedef struct pilha{ float valor; }Pilha; void pilha_push(Pilha *p1, float valor){ p1++; p1->valor=valor; } float pilha_pop(Pilha *p1){ return p1->valor; } int pilhavazia(Pilha *p1){ if(p1->valor==-1) return 1; else return 0; } int numelementodamaior(Pilha *p1,Pilha *p2){ float pilhaauxiliar[20]; int i,contadorpilha1=0,contadorpilha2=0; while(!pilhavazia(p1)){ pilhaauxiliar[contadorpilha1]=pilha_pop(p1--); //O -- no ponteiro foi uma de minhas adaptacoes contadorpilha1++; } for(i=contadorpilha1-1;i>=0;i--) pilha_push(p1,pilhaauxiliar[i]); while(!pilhavazia(p2)){ pilhaauxiliar[contadorpilha2]=pilha_pop(p2--); contadorpilha2++; } for(i=contadorpilha2-1;i>=0;i--) pilha_push(p2,pilhaauxiliar[i]); if(contadorpilha1>contadorpilha2) return contadorpilha1; else return contadorpilha2; } int main(){ Pilha p1[11], p2[11],*p1ptr=p1,*p2ptr=p2; p1[0].valor=-1;//-1 na primeira posicao significa pilha vazia. Os valores inseridos virao a partir da segunda posicao e em diante. p2[0].valor=-1; /*Aqui se insere quantos valores quiser nas duas pilhas sempre apos isso apontando os ponteiros de pilha para as posicoes das pilhas aonde estiverem os ultimos elementos que foram inseridos*/ printf("Numero de elementos da maior pilha:%d",numelementodamaior(p1ptr,p2ptr)); system("pause"); } #include<stdlib.h> typedef struct fila{ int valor; struct fila *proximo; }Fila; Fila *fila_cria(){ return malloc(sizeof(Fila)); } int fila_retira(Fila *f){ int valor; while(f->proximo) f=f->proximo; valor=f->valor; f->proximo=NULL; return valor; } void fila_insere(Fila *f,int v){ while(f->proximo) f=f->proximo; f->proximo=malloc(sizeof(Fila)); f->proximo->valor=v; f->proximo->proximo=NULL; } void TrocaElementos(Fila *f1,Fila *f2,int n){ int i,auxiliar; for(i=0;i<n;i++) if(!f1->proximo){ i++; break; } if(n>i) printf("n e maior do que uma das filas. A troca nao pode ser feita."); else{ for(i=0;i<n;i++) if(!f2->proximo){ i++; break; } if(n>i) printf("n e maior do que uma das filas. A troca nao pode ser feita."); else for(i=0;i<n;i++){ auxiliar=f1->valor; f1->valor=f2->valor; f2->valor=auxiliar; f1=f1->proximo; f2=f2->proximo; } } } void imprimefila(Fila *f){ do{ printf("%d\n",f->valor); f=f->proximo; }while(f); } int main(){ Fila *f1=fila_cria(),*f2=fila_cria(); f1->valor=5; f1->proximo=NULL; f2->valor=10; f2->proximo=NULL; fila_insere(f1,12); fila_insere(f2,13); TrocaElementos(f1,f2,1); imprimefila(f1); system("pause"); }- 4 respostas
-
Cria uma variável para guardar o valor do último chute: int ultimo_chute; printf("digite o chute:"); scanf("%d",&chute); if(chute==ultimo_chute) printf("numero ja chutadado na ultima"); else ultimo_chute=chute;
-
Como avisar para o usuário que ele já jogou o mesmo número
Wilkyn Fernandes Taborda respondeu ao tópico de Henrique Ferreira Silva em C/C++
Exatamente. Como o número máximo de jogadas será 20 então dá para fazer o vetor de jogadas com 20 posições. Cada vez que joga um número não-repetido armazena nele para depois comparar. Adiciona na função main o novo vetor de jogadas e as novas variáveis de controle: int vetor_de_jogadas[20],jogadas_armazenadas=0,j; e depois adiciona essas linhas após ler a tentativa do jogador: if (i==1){ vetor_de_jogadas[0]=chute; jogadas_armazenadas++; } else{ for(j=0;j<jogadas_armazenadas;j++) if(chute==vetor_de_jogadas[j]){ printf("tentativa ja realizada"); break; } if(j==jogadas_armazenadas){ vetor_de_jogadas[j]=chute; jogadas_armazenadas++; } } -
int main(){ int numero,i; printf("Digite um numero para ver se e triangular:"); scanf("%d",&numero); for(i=1;i<10000;i++) if(numero!=i*(i+1)*(i+2)); else{ printf("O numero e triangular."); system("pause"); exit(0); } printf("O numero nao e triangular."); system("pause"); } int main(){ int matriz[10][10],i,j; /*Preencher os valores da matriz como quiser*/ for(i=0;i<10;i++) for(j=0;j<10;j++) printf("Elemento:%d Indices:[%d] [%d]\n",matriz[i][j],i+1,j+1); system("pause"); }
- 4 respostas
-
- linguagem c
- matriz
-
(e mais 1 )
Tags: