Wilkyn Fernandes Taborda
Members-
Total de itens
73 -
Registro em
-
Última visita
Tudo que Wilkyn Fernandes Taborda postou
-
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:
-
int main(){ int i,j,A[3][3],B[3][3],C[3][3],D[3][3],eprimo,primos=0,auxiliar,fatorial,media; for(i=0;i<3;i++) for(j=0;j<3;j++){ printf("Digite elemento %d,%d da matriz A:",i,j); scanf("%d",&A[i][j]); } printf("A matriz A e:\n"); for(i=0;i<3;i++){ for(j=0;j<3;j++) printf("%d ",A[i][j]); printf("\n"); } printf("A matriz B que e a transposta de A e:\n"); for(i=0;i<3;i++){ for(j=0;j<3;j++){ B[i][j]=A[j][i]; printf("%d ",B[i][j]); } printf("\n"); } printf("A matriz C que e a soma de A e B e:\n"); for(i=0;i<3;i++){ for(j=0;j<3;j++){ C[i][j]=A[i][j]+B[i][j]; printf("%d ",C[i][j]); } printf("\n"); } printf("A matriz D que e a multiplicacao de A e B e:\n"); D[0][0]=(A[0][0]*B[0][0])+(A[0][1]*B[1][0])+(A[0][2]*B[2][0]); D[0][1]=(A[0][0]*B[0][1])+(A[0][1]*B[1][1])+(A[0][2]*B[2][1]); D[0][2]=(A[0][0]*B[0][2])+(A[0][1]*B[1][2])+(A[0][2]*B[2][2]); D[1][0]=(A[1][0]*B[0][0])+(A[1][1]*B[1][0])+(A[1][2]*B[2][0]); D[1][1]=(A[1][0]*B[0][1])+(A[1][1]*B[1][1])+(A[1][2]*B[2][1]); D[1][2]=(A[1][0]*B[0][2])+(A[1][1]*B[1][2])+(A[1][2]*B[2][2]); D[2][0]=(A[2][0]*B[0][0])+(A[2][1]*B[1][0])+(A[2][2]*B[2][0]); D[2][1]=(A[2][0]*B[0][1])+(A[2][1]*B[1][1])+(A[2][2]*B[2][1]); D[2][2]=(A[2][0]*B[0][2])+(A[2][1]*B[1][2])+(A[2][2]*B[2][2]); for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("%d ",D[i][j]); } printf("\n"); } if(((D[0][0]>=-3)&&(D[0][0]<=3))&&(D[0][0]!=0)) eprimo=1; else if(D[0][0]!=0){ if(D[0][0]>0) i=D[0][0]-1; else i=D[0][0]+1; while((i>1)||(i<-1)){ if((D[0][0]%i)==0){ eprimo=0; break; } if(D[0][0]>0) i--; else i++; } if((i==1)||(i==-1)) eprimo=1; } else eprimo=0; if(eprimo) primos++; if(((D[1][1]>=-3)&&(D[1][1]<=3))&&(D[1][1]!=0)) eprimo=1; else if(D[1][1]!=0){ if(D[1][1]>0) i=D[1][1]-1; else i=D[1][1]+1; while((i>1)||(i<-1)){ if((D[1][1]%i)==0){ eprimo=0; break; } if(D[1][1]>0) i--; else i++; } if((i==1)||(i==-1)) eprimo=1; } else eprimo=0; if(eprimo) primos++; if(((D[2][2]>=-3)&&(D[2][2]<=3))&&(D[2][2]!=0)) eprimo=1; else if(D[2][2]!=0){ if(D[2][2]>0) i=D[2][2]-1; else i=D[2][2]+1; while((i>1)||(i<-1)){ if((D[2][2]%i)==0){ eprimo=0; break; } if(D[2][2]>0) i--; else i++; } if((i==1)||(i==-1)) eprimo=1; } else eprimo=0; if(eprimo) primos++; printf("Na diagonal principal da matriz D existem %d numeros primos.\n",primos); printf("Os fatoriais dos elementos da matriz B sao:\n"); for(i=0;i<3;i++){ for(j=0;j<3;j++){ if(B[i][j]==0) fatorial=1; else{ fatorial=B[i][j]; auxiliar=B[i][j]-1; while(auxiliar>1){ fatorial=fatorial*auxiliar; auxiliar--; } } printf("%d ",fatorial); } printf("\n"); } printf("A media aritmetica dos elementos da diagonal principal da matriz C e: %d",(C[0][0]+C[1][1]+C[2][2])/3); system("pause"); } Não incluí no meu código as funções de retornar o fatorial de um inteiro e também a de retornar 1 se o inteiro for primo e 0 se não por que achei desnecessário já que na parte dos cálculos das matrizes o meu programa já faz isso.
-
c e c++ Desenvolvimento de software que calcula o imc se ele está em cima ou abaixo de ideal
Wilkyn Fernandes Taborda respondeu ao tópico de Mith6 em C/C++
Mith6 o programa realiza somente cálculos simples e não precisa incluir a biblioteca math.h. É desnecessário que haja a variável imc e também calculá-la pois o enunciado não pede essa informação. Está faltando o cálculo do peso ideal para sexo feminino. Está-se comparando a variável sexo com a variável m que não é mesma coisa que o caractere 'm'. Deve-se trocar. Variáveis m e f não são usadas. Podem ser removidas. main(){ float a,p,pi; char sexo; printf("Informe o sexo. m para masculino e f para feminino:"); scanf("%c",&sexo); printf("Altura:"); scanf("%f",&a); printf("Peso:"); scanf("%f",&p); if(sexo=='m') pi=(72.7*a)-58; else pi=(62.1*a)-44.7; if(p>pi) printf("O peso esta acima do ideal.\n"); else if(p<pi) printf("O peso esta abaixo do ideal.\n"); else printf("O peso e ideal!\n"); system ("pause"); } -
Fornecendo todos os nós da árvore e suas ligações não há motivo para infomar os percursos pois é possível calcular.
- 2 respostas
-
linguagem c Alocação de memória ajuda
Wilkyn Fernandes Taborda respondeu ao tópico de Brunow0 em C/C++
Na função cadastrar sempre que é inserido um novo registro o programa grava na primeira posição o que fará com que ao consultar somente apareça o último por que os outros estarão sobrescritos. Deve-se mover o ponteiro da lista antes de gravar novos. Nas linhas: scanf ( "%d%*c" , & op1 ); fflush ( stdin); há uma redundância por que o formatador %*c que serve para eliminar o retorno de carro da fila de caractéres de entrada de teclado é seguido pelo comando fflush(stdin) que têm a mesma função ordenando o computador a fazer duas vezes a mesma coisa. Desnecessariamente por que só com o %*c o retorno de carro já é eliminado. Nesse programa dispensa-se o uso da variável op1 já que toda vez que o usuário optar pode-se usar a mesma variável op. Removendo op1 irá resultar em economia de código e de memória RAM. Toda vez que a memória é realocada é usado um ponteiro diferente com o mesmo nome para receber a porção de memória. Isso vai gerar resultados incorretos por que toda vez que realocar irá devolver a memória para um ponteiro diferente. Deve-se usar somente um ponteiro. Nos cases 4 e 5 não é necessário realocar o ponteiro por que toda vez que opta por cadastrar um novo ele já faz isso e também não precisa da função fflush(stdin) pois o comando gets não deixa o retorno de carro na fila e o mesmo vale para a leitura de nome, e-mail e telefone da função altera. No case 9 da função menu pode-se retirar o comando break. Ao usuário digitar 9 o programa já irá sair do bloco de código switch devido ao comando de retorno de função. O seu código reaproveitado e com as modificações que eu falo: #include <stdio.h> #include <stdlib.h> #include <string.h> int op = 0 , qcad = 0 , i = 0 , x , y ; char name [ 50 ]; struct contato { char nome [ 50 ]; char email [ 50 ]; char telefone [ 15 ]; } * c; void cadastrar () { printf ( "\nDigite o nome: " ); gets ( c[ i ]. nome ); strupr ( c[ i ]. nome ); printf ( "Digite o email: " ); gets ( c[ i ]. email ); printf ( "Digite o telefone: " ); gets ( c[ i ]. telefone ); i ++; do { printf ( "\nDeseja cadastrar mais? \n1-SIM \n2-NAO\n" ); scanf ( "%d%*c" , & op ); if ( op == 1 ) { c =( struct contato *)( realloc ( c ,( qcad + 1 )* sizeof ( struct contato ))); if ( c == NULL ) { printf ( "\n ERRO // MEMORIA INSUFICIENTE" ); exit ( 1 ); } qcad ++; cadastrar (); } } while ( op != 2 ); } void altera () { printf ( "Digite o nome: " ); gets ( name ); strupr ( name ); for ( x = 0 , y =- 1 ; x < i ; x ++) { if ( strcmp( name , c [ x ]. nome )==0 ) { y = x ; } } if ( y < 0 ) { printf ( "\nNOME NAO CADASTRADO\n\n" ); system ( "pause" ); } else { printf ( "\nDigite o novo nome: " ); gets ( c [ y ]. nome ); strupr ( c [ y ]. nome ); printf ( "\nDigite o novo email: " ); gets ( c [ y ]. email ); printf ( "\nDigite o novo telefone: " ); gets ( c [ y ]. telefone ); } } void ordena () { char nomeaux [ 50 ]; char emailaux [ 50 ]; char telefoneaux [ 15 ]; for ( x = 1 ; x < i ; x ++) { for ( y = x ; y > 0 ; y --) { if ( strcoll ( c [ y ]. nome , c [ y - 1 ]. nome ) < 0 ) { strcpy ( nomeaux , c [ y ]. nome ); strcpy ( emailaux , c [ y ]. email ); strcpy ( telefoneaux , c [ y ]. telefone ); strcpy ( c [ y ]. nome , c [ y - 1 ]. nome ); strcpy ( c [ y ]. email , c [ y - 1 ]. email ); strcpy ( c [ y ]. telefone , c [ y - 1 ]. telefone ); strcpy ( c [ y - 1 ]. nome , nomeaux ); strcpy ( c [ y - 1 ]. email , emailaux ); strcpy ( c [ y - 1 ]. telefone , telefoneaux ); } } } } void consulta () { if ( i == 0 ) { printf ( "\nNENHUM CADASTRO\n\n" ); system ( "pause" ); } else { ordena (); for ( x = 0 ; x < i ; x ++) { printf ( "\n NOME: %s " , c [ x ]. nome ); printf ( "\n EMAIL: %s " , c [ x ]. email ); printf ( "\n FONE: %s \n" , c [ x ]. telefone ); system ( "pause" ); } } } void exclui () { for ( x = 0 , y =- 1 ; x < i ; x ++) { if ( strcmp( name , c [ x ]. nome )==0 ) { y = x ; } } if ( y < 0 ) { printf ( "O nome nao existe\n" ); } else { printf ( "Deseja excluir? \n1 - SIM \n2 - NAO\n" ); scanf ( "%d%*c" ,& op ); if ( op == 1 ) { strcpy ( c [ y ]. nome , c [ i - 1 ]. nome ); strcpy ( c [ y ]. email , c [ i - 1 ]. email ); strcpy ( c [ y ]. telefone , c [ i - 1 ]. telefone ); i --; c =( struct contato *)( realloc ( c ,( i )* sizeof( struct contato ))); qcad --; printf ( "EXCLUIDO COM SUCESSO\n" ); } } } void pesquisa () { printf ( "Digite o nome: " ); gets ( name ); strupr ( name ); for ( x = 0 , y =- 1 ; x < i ; x ++) { if ( strcmp( name , c [ x ]. nome )==0 ) { y = x ; } } if ( y < 0 ) { printf ( "O nome nao existe\n" ); system ( "pause" ); } else { printf ( "\n NOME: %s " , c [ y ]. nome ); printf ( "\n EMAIL: %s " , c [ y ]. email ); printf ( "\n FONE: %s \n" , c [ y ]. telefone ); exclui ( c ); system ( "pause" ); } } void menu () { c =( struct contato *) malloc( qcad * sizeof ( struct contato )); if ( c == NULL ) { printf ( "\n ERRO // MEMORIA INSUFICIENTE" ); exit ( 1 ); } do { system ( "cls" ); op =- 1 ; printf ( "******MENU******\n" ); printf ( "1 - Cadastrar \n2 - Alterar \n3 - Consultar \n4 - Excluir \n5 - Pesquisar \n9 - Sair\n" ); printf ( "****************\n" ); scanf ( "%d%*c" , & op ); switch ( op ) { case 1 : c =( struct contato *)( realloc ( c ,( qcad + 1 )* sizeof ( struct contato ))); if ( c == NULL ) { printf ( "\n ERRO // MEMORIA INSUFICIENTE" ); exit ( 1 ); } qcad ++; cadastrar (); break ; case 2 : altera ( c ); break ; case 3 : consulta ( c ); break ; case 4 : printf ( "Digite o nome: " ); gets ( name ); strupr ( name ); exclui ( c ); system ( "pause" ); break ; case 5 : pesquisa ( c ); break ; case 9 : return 0 ; default : puts ( "Opcao invalida!!!\n\n\n" ); system ( "pause" ); } } while ( op != 9 ); } int main () { menu (); return 0 ; } -
Algoritimo para contar repeticoes de valores em vetores
Wilkyn Fernandes Taborda respondeu ao tópico de Diego Casarin em C/C++
int main(){ int V1[40],V2[40],N,i,j,conta=1,comparado=0; do{ printf("Informe quantos algarismos(maximo 40):"); scanf("%d",&N); if((N<1)||(N>40)) printf("Numero de algarismos invalido."); }while((N<1)||(N>40)); printf("Somente e valido digitar algarismos 1 e 0 e o primeiro deve ser 0."); for(i=0;i<N;i++){ printf("\nDigite o algarismo %d:",i+1); scanf("%d",&V1[i]); } if(V1[0]!=0){ printf("Sequencia invalida. Primeiro algarismo deve ser 0."); system("pause"); exit(0); } for(i=0;i<N;i++) if((V1[i]!=0)&&(V1[i]!=1)){ printf("Sequencia invalida. Algarismo invalido."); system("pause"); exit(0); } for(i=1,j=0;i<N;i++){ if(V1[i]==comparado) conta++; else{ V2[j]=conta; conta=1; j++; if(comparado==0) comparado++; else comparado--; } } V2[j]=conta; printf("V2: "); for(i=0;i<=j;i++) printf("%d ",V2[i]); system("pause"); } -
arthurdr ao compilar o seu programa ele trava logo no começo da execução antes mesmo de imprimir qualquer coisa na tela por que as variáveis M e N que delimitam o tamanho das cadeias de caracteres p e t não são inicializadas com valor algum fazendo com que elas assumam qualquer valor que esteja escrito naquela região da memória para aonde elas apontam e consequentemente tornando seus valores inteiros em lixo de memória. Aqui no meu computador ao mandar imprimir o valor inteiro de M ele mostra um número maior do que 2 bilhões. Isso explica tudo pois para cada posição da cadeia de caracteres p o programa irá reservar 1 byte na memória e nesse caso p vai ter mais do que 2 bilhões de bytes o que calculando resulta em p sendo uma variável de 2 giga bytes e isso é muito mais do que toda a memória do meu computador que é de apenas 256 mega bytes. Mais abaixo o programa tenta comparar cada letra digitada e armazenada em p com as letras A, C, G e T para ver se a cadeia digitada pelo usuário contém somente as letras permitidas e caso não contenha retorna uma mensagem dizendo que a cadeia digitada é inválida porém a cada comparação ele testa se a cadeia inteira é igual a cada letra o que fará com que dê sempre a mensagem de cadeia inválida mesmo que o usuário digite somente as letras permitidas pois um conjunto de letras é diferente de apenas uma letra em individual. Para que o teste dê positivo deve-se comparar individualmente cada letra da cadeia digitada com as do código. Para fazer isso usa-se um número entre colchetes após o nome da cadeia que indicará a posição da letra na cadeia que se quer comparar. Pode-se também usar uma variável para representar esse número. Então: for (i = 0 ; i < M ; i ++) if (( p!= 'A' ) && ( p!= 'C' ) && ( p != 'G' ) && ( p != 'T' )) letrasP = 1 ; else letrasP = 0 ; irá ficar: for (i = 0 ; i < M ; i ++) if (( p[i]!= 'A' ) && ( p[i]!= 'C' ) && ( p[i] != 'G' ) && ( p[i] != 'T' )) letrasP = 1 ; else letrasP = 0 ; Mais abaixo o programa em um laço com contador tenta verificar se há alguma letra não permitida digitada repetindo diversas vezes o mesmo teste que sempre dará a mesma resposta. Podemos modificá-lo para que faça o teste somente uma vez. Então: for (i = 0 ; i < M ; i ++) if ( letrasP==1 ) letraP = 1 ; Vai ficar: if ( letrasP==1 ) letraP = 1 ; Podemos fazer até mais do que isso. Usar uma variável apenas para confirmar se há caractéres não-permitidos ao invés de duas. Então: if ( letrasP==1 ) letraP = 1 ; if ( letraP== 1) printf ( "\n\n !!!CADEIA DE p INVALIDA!!!\n" ); Vai ficar: if ( letrasP==1 ) printf ( "\n\n !!!CADEIA DE p INVALIDA!!!\n" ); e consequentemente removendo a variável não usada letraP do código e todas as demais linhas de código que a utilizam. As variáveis inteiras declaradas a e b podem ser retiradas também pois não são usadas. Após ler a cadeia t podemos fazer o mesmo que com p e colocarmos um índice após o nome da cadeia durante as comparações e também remover a variável letraT e as referências a ela. O laço de repetição que fica fazendo várias vezes a mesma comparação com a variável letrasT também pode ser removido. Na comparação que serve para mostrar a mensagem de cadeia t inválida podemos substituir a variável letraT que iremos remover por letrasT no lugar e também fazer o mesmo na condição do laço que repete a leitura da cadeia t. A linha que imprime o tamanho de um inteiro em bytes logo no começo da função principal após a primeira declaração de variáveis também pode ser removida e o mesmo vale para a variável j. O programa completo e funcionando desse jeito que eu falo fica assim: #include <stdio.h> #include <stdlib.h> #include <string.h> main () { int M = 5, N = 25, i; char p [ M ], t [ N ]; int letrasT , letrasP; do { do { i = 0 ; letrasP = 0; printf ( "\n Digite a cadeia p: " ); scanf ( "%s" , p ); if ( M != strlen (p )) printf ( "\n\n !!!TAMANHO DE p INVALIDO!!!\n" ); for (i = 0 ; i < M ; i ++) if (( p[i]!= 'A' ) && ( p[i]!= 'C' ) && ( p[i] != 'G' ) && ( p[i] != 'T' )) letrasP = 1 ; else letrasP = 0 ; if ( letrasP== 1) printf ( "\n\n !!!CADEIA DE p INVALIDA!!!\n" ); }while ( letrasP== 1); } while ( M< strlen (p )); do { do { i = 0 ; letrasT = 0; printf ( "\n Digite a cadeia t: " ); scanf ( "%s" , t ); if ( N != strlen (t )) printf ( "\n\n !!!TAMANHO DE t INVALIDO!!!\n" ); for (i = 0 ; i < N ; i ++) if (( t[i]!= 'A' ) && ( t[i]!= 'C' ) && ( t[i] != 'G' ) && ( t[i] != 'T' )) letrasT = 1 ; else letrasT = 0 ; if ( letrasT== 1) printf ( "\n\n !!!CADEIA DE t INVALIDA!!!\n" ); }while ( letrasT== 1); } while ( N< strlen (t )); printf ("\n%s" , p ); printf ("\n%s" , t ); system("pause"); }
-
É desnecessário inicializar T2 com 11 pois como os vetores na linguagem C iniciam com seu índice em 0 e terminam em o tamanho do vetor -1 então a última posição do vetor x será 9. Por causa disso no meu programa inicializo T2 com 9 para que ela guarde o índice da base oposta da pilha. Se quiser respeitar o enunciado é só modificar o valor de inicialização dela para 11 e alterar durante o código. Aí vai: int main(){ int valor,X[10],T1=0,T2=9,i; for(i=0;(i<20)&&(T1<10)&&(T2>-1)&&(T1<=T2);i++){ printf("digite um valor:"); scanf("%d",&valor); if((valor>=1)&&(valor<=99)) if(!(valor%2)){ //se e par if(valor>50){ //se e maior do que 50 X[T1]=valor; T1++; } else{ //se e menor ou igual a 50 if(T1>0){ printf("Valor retirado do topo da pilha 1: %d",X[T1-1]); T1--; } else{ printf("UNDERFLOW. Nao ha valor na pilha."); } } } else{ //se e impar if(valor>50){ //se e maior do que 50 X[T2]=valor; T2--; } else{ //se e menor ou igual a 50 if(T2<9){ printf("Valor retirado do topo da pilha 2: %d",X[T2+1]); T2++; } else{ printf("UNDERFLOW. Nao ha valor na pilha."); } } } else printf("valor fora do intervalo permitido que e de 1 a 99."); } printf("Pilha1:\n"); for(i=0;i<T1;i++) printf("%d\n",X[i]); printf("Pilha2:\n"); for(i=9;i>T2;i--) printf("%d\n",X[i]); system("pause"); }
-
Problema Olímpico com Números Pares
Wilkyn Fernandes Taborda respondeu ao tópico de Villain em C/C++
Em cada um dos inteiros existentes entre 2007 e 7002 o programa identifica todos os algarismos e os divide por 2 para ver se são pares. Os números que tem todos os algarismos pares são mostrados na tela. int main(){ int numero, algarismos[4]={2,0,0,7},i,epar; epar=1; for(numero=2007;numero<=7002;numero++){ for(i=0;i<4;i++) if(algarismos[i]%2) epar=0; if(epar) printf("%d\n",numero); epar=1; if(algarismos[3]<9) algarismos[3]++; else if(algarismos[2]<9){ algarismos[3]=0; algarismos[2]++; } else if(algarismos[1]<9){ algarismos[3]=0; algarismos[2]=0; algarismos[1]++; } else{ algarismos[3]=0; algarismos[2]=0; algarismos[1]=0; algarismos[0]++; } } system("pause"); } -
Batalha_Naval: como impedir que os navios fiquem próximos uns aos outros?
Wilkyn Fernandes Taborda respondeu ao tópico de trompczinsky em C/C++
Sendo uma matriz de 10x10 posições marcada com 0 nas posições livres e 1 nas preenchidas: while(1){ printf("\ndigite a linha e coluna:"); scanf("%d",&linha); scanf("%d",&coluna); if((linha>=0)&&(linha<=10)&&(coluna>=0)&&(coluna<=10)) if (matriz[linha][coluna]) printf("Posicao ocupada. Tente outra."); else if((coluna>0) && matriz([linha][coluna-1])) printf("Muito Proximo. Tente outra posicao."); else if((coluna<9) && matriz([linha][coluna+1])) printf("Muito Proximo. Tente outra posicao."); else if((linha>0) && matriz([linha-1][coluna])) printf("Muito Proximo. Tente outra posicao."); else if((linha<9) && matriz([linha+1][coluna])) printf("Muito Proximo. Tente outra posicao."); else matriz[linha][coluna]=1; } -
Fettuccine, ricci - recursividade
Wilkyn Fernandes Taborda respondeu ao tópico de GuilhermeZX em C/C++
Corrigindo: Se o termo for par, resultado = atual - anterior, se for ímpar, resultado = atual + anterior. Ricci: int main(){ int num1,num2,soma,i; printf("Digite o 1o Numero:"); scanf("%d",&num1); printf("Digite o 2o Numero:"); scanf("%d",&num2); printf("Os dez primeiros termos:"); printf("\n%d\n%d",num1,num2); for (i=0;i<8;i++){ soma=num1+num2; printf("\n%d",soma); num1=num2; num2=soma; } system("pause"); } Fetuccine: int main(){ int num1,num2,resultado,i; printf("Digite o 1o Numero:"); scanf("%d",&num1); printf("Digite o 2o Numero:"); scanf("%d",&num2); printf("Os dez primeiros termos:"); printf("\n%d\n%d",num1,num2); for (i=3;i<=10;i++){ if (i%2==1){ resultado=num2+num1; printf("\n%d",resultado); } else{ resultado=num2-num1; printf("\n%d",resultado); } num1=num2; num2=resultado; } system("pause"); }