Ir ao conteúdo

UmPrograma

Membro Pleno
  • Posts

    176
  • Cadastrado em

  • Última visita

Tudo que UmPrograma postou

  1. @giu_d Valeu. Deu para entender sim. So uma coisa o formatador de saída não é o -> %p , para o endereco de memoria ? Obs: no incio achei que o meu estava errado, pois so anulava o dois primeiro numero, e o resto se repetia igual.
  2. @AnsiC @giu_d Deixe-me ver então. QUer dizer que depois de usar o free, a variavel não é anulada. Quando perguntamos porque não estava dando certo a ele, ele simplesmente não respondeu, e olha que ninguem na sala conseguiu. Estavamos fazendo exercicios simples depois de cada pequena parte que ele explicava. Que no caso eram sobre alocação (malloc, calloc, realloc, free). O free não deve ser usado depois que alocar algo dinamicamente, para liberar memoria (ou algo assim).??????? So sei que ele disse que não deveria mostrar nada, que daria erro. Mas, em algum momento, ele disse sobre zerar. Acredito que deveria mostrar lixo na memoria, que é o que o porgrama esta fazendo ( EU ACHO), mas não sei se esta certo (alias nem dos programas que fiz de alocação kkkkk , perguntei a professor como era para ser a resposta dos outros programas e ele disse : Se você fez tudo certo,então esta certo, chato isso pois não sei se estou indo pro caminho certo)
  3. Boa noite, como estão? O professor estava a explicar sobre alocação dinamica de memoria, no entanto quando ele propos um exercicio com o uso da funcao free que quando resolvermos ele não librerou a memoria como deveria ter sido feito segundo o professor. No caso perguntamos porque nao deu certo e ele nao respondeu (ate onde vi todos falaram que nao deu certo). Era para aparecer 0 (zero) segundo o professor. Segue o codigo,, se puderem olhar e apontar o erro. #include <stdio.h> #include <stdlib.h> // NECESSARIA !!!! main(){ int a, *p, i; printf("Digite valor de a: "); scanf("%d", &a); p = (int *)malloc(a*sizeof(int)); if(!p){ printf("ERRO: MEMORIA INSUFICIENTE!"); exit; } for(i=0;i<a;i++){ p[i]=i*i; } for(i=0;i<a;i++){ printf("Vetor p[%d]: %d\n", i, p[i]); } printf("\n\nAhora depois de deixar de apontar para o p.\n"); free(p); for(i=0;i<a;i++){ printf("Vetor p[%d]: %d\n", i, p[i]); /// ERA AQUI QUE ERA PARA MOSTRAR ZERO, SEGUNDO O TEACHER. } return 0; } OBS: Ele me disse que o free nao apaga, mas faz com que o ponteiro deixe de apontar para ele (a variavel que ele apontava).
  4. @AnsiC @woocsith Valeu pela ajuda. Muito obrigado....
  5. @AnsiC O unico problema que achei maior foi o return, pois ele esta retornando o vetor que nao estou usando. O return nao serviu para nada ai, ja que estou usando ponteiro.
  6. @AnsiC Mas o meu codigo fugiu do que foi pedido. Pois ora acho que esta certo , ora não. @woocsith Porque de usar o pre incremento, isso nao vai pular o indice 0.
  7. Olá pessoal, boa noite. Estou tendo dificuldade para resolver um exercicio de ponteiros aqui. na verdade, não estou conseguindo fazer com que retorne um vetor de inteiro. No caso iria retornar so a primeira posicao do vetor, pois para retornar ele inteiro acho que o return teria que esta dentro de um for (nao sei bem). Segue o codigo. /**1 1 )Escreva uma função que recebe uma string de caracteres e uma ltra e devolve um vetor de inteiros contendo asposições (índices no vetor dastring) onde a letra foi encontrada) e um inteiro contendo o tamanho do vetor criado (total de letras iguais encontradas). Utilize o retorno de um vetor para retornar os índices e um ponteiro para guardar o tamanho do vetor.*/ #include <stdio.h> #include <string.h> main (){ int tam, tamV, i, v[15]; char letra[2], str[15]; printf("Informe a string: "); scanf("%s", &str); printf("Informe a letra: "); scanf("%s", &letra); tam=strlen(str); int retorno( char *str, char *letra, int tam, int *tamV, int *v); //retorno(str, letra, tam, &tamV); retorno(str, letra, tam, &tamV, v); for(i=0;i<tamV;i++){ printf("Vetor [%d]: %d.\n", i, v[i]++); } printf("O tamanho do vetor criado e de %d posições.\n", tamV); } int retorno(char *str, char *letra, int tam, int *tamV, int *v){ int a=0, vet[a], i; for(i=0;i<tam;i++){ if(letra[0]==str[i]){ vet[a]=i; v[a]=i; a++; } } *tamV=a; return v[0]; } OBS : O EXERCICIO ESTA RODANDO TUDO CERTO, SO QUE NAO RETORNA UM VETOR COMO PEDE. MAS FUNCIONA ( ); Como conseguiria fazer ele retornar o vetor??. Adendo: No caso aí, eu cheguei a criar um vetor dentro da funcao, pois inicialmente pensei em retornar ele, mas se é retornar acho que tem que esta nao funcao principal (resolvir deixar ele ai). E no return, esta devolvendo somente a primeira posicao. Ai pensei em passar o endereco da primeira posicao e fazer rodar as posições seguintes no MAIN, so que nao da muito certo e so mostra o primeiro valor do vetor;
  8. Nao poderia usar o strcmp? Ou for , utilizando operador == ?
  9. @isrnick Conseguir encontrar o erro aqui. Era porque saque e des sao parametros do tipo float e estava declarado do tipo int, na ultima funcao.
  10. @isrnick Verdade, esqueci de atribuir o valor da operacao a algo. So uma coisa, pode usar float em struct (sei que sim), é porque quando uso nunca da certo. Nesse caso por exemplo, mesmo apos as mudancas nao aperece os resultados, acho que esta aperecendo lixo de memoria, numeros aleatorios. Em outro exercicio tive que mudar de float para int pois so assim que estava funcionando.
  11. Olá, boa noite. Estava a resolver um exercicio aqui que pedia para criarmos uma contas de banco, nela teriamos que permitir saque e retiradas. Conseguir fazer até certa parte, so que na parte que ira sacar ou depositar valores não da certo, parece que a operacao nao realiza. Segue o codigo. /*4. Escreva um programa que simule contas bancárias, com as seguintes especificações: • Ao iniciar o programa vamos criar contas bancárias para três clientes. o Cada conta terá o nome e o CPF do cliente associado a ela. o No ato da criação da conta o cliente precisará fazer um depósito inicial. • Após as contas serem criadas, o sistema deverá possibilitar realizações de saques ou depósitos nas contas. o Sempre que uma operação de saque ou depósito seja realizada, o sistema deverá imprimir o nome do titular e o saldo final da conta.*/ #include <stdio.h> struct conta{ char nome[15]; int cpf; float saldo; }banco; main (){ int pes, res;; struct conta banco[3]; void preencher(struct conta *banco); preencher(banco); printf("Deseja realizar um saque (1) ou deposito (2): "); scanf("%d", &res); if(res==1 || res == 2){ printf("Digite o CPF para a pesquisa: "); scanf("%d", &pes); } else{ printf("Bye!!!"); return 0; } void mexer(int pes, int res, struct conta *banco); mexer(pes, res, banco); } void preencher(struct conta *banco){ int i; for(i=0;i<3;i++){ printf("Informe o seu nome: "); scanf("%s%*c", &banco[i].nome); printf("Informe o seu CPF: "); scanf("%d%*c", &banco[i].cpf); printf("Entre com o seu saldo: "); scanf("%f%*c", &banco[i].saldo); printf("\n\n"); } } void mexer(int pes, int res, struct conta *banco){ int i, saque, dep, num; if(res==1){ printf("Informe o quanto sera retirado: "); scanf("%f", &saque); for(i=0;i<3;i++){ if(pes==banco[i].cpf){ banco[i].saldo - saque; num=i; } } } if (res==2){ printf("Informe o quanto sera depositado: "); scanf("%f", &dep); //for(i=0;i<3;i++){ for(i=0;i<3;i++){ if(pes==banco[i].cpf){ banco[i].saldo + dep; num=i; } } //} } printf("Nome: %s\n", banco[num].nome); printf("De CPF: %d\n", banco[num].cpf); printf("Seu novo saldo: %f",banco[num].saldo); }
  12. Entendi agora. No que eu tinha feito la em cima de exemplo de uma soma de numeros "infinitos" coloquei diretamente a media dentro do laço para que voce impresso em seguida da leitura. Ai no caso acima, atende melhor o exercicio pedia. GENIAL,
  13. Mas se esta acumulando, acredito que nao tenha como o numero ficar negativo. Não sei bem, mas acho isso meio estranho. Seria o caso realmente utilizar de algum caracter para sair do loop., como disso o @AnsiC .
  14. @isrnick Foi isso que eu pensei. é...... @AnsiC Mas na hora do for, ficaria como? Deixaria em branco na condicao de parada. Fiz um codigo a parte aqui usando while. Exemplo: #include <stdio.h> int main(void) { int num,i=1,j=0, soma=0; float media; while(i==1){ printf("Digite um numero: "); scanf("%d", &num); j++; soma=soma+num; media=soma/j; printf("\nA media e %f\n", media); } } (interessante a forma como voce ver o problema, no inicio em ate cheguei a pensar que estava faltando algo, pois como o prof vai verificar se o programa nunca acaba, ai fiz no vetor)
  15. @AnsiC Como assim limitar as entradas?
  16. @AnsiC Sim eu poderia ir lendo os valores e ja somando, para depois realizar a media. Evitaria realmente a criacao de mais variaveis. Muito inteligente e Muito bom. Obrigado. @isrnick Consegui aqui, ainda mantive a ordem, entretanto eu tive que colocar um valor para a variavel 'A' de inicio, mesmo que depois acaba sendo escrito outro valor por "cima" . Pois sem um valor de inicio nao rodava. (estranho, ja que a sua leitura era logo em seguida) Obs: Eu normalmente quando passo o vetor para uma funcao em faco da seguinte forma: void qualquerFuncao (int *vet); Interessante a forma como você passou. Muito legal.
  17. Hey, guys. Estava resolvendo o exercicio de media, simples. No entanto, a função criada esta lendo o dobro do que deveira. Segue o codigo. Obs: O erro, possivelmente, esta na funcao ja que a leitura se dar dentro dela. (acredito) /**17. Faça uma função que leia um número não determinado de valores positivos e retorna a média aritmética dos mesmos.*/ #include <stdio.h> main (){ int a; printf("Informe quantos numeros serao lidos: "); scanf("%d", &a); float media(int a); media(a); printf("A media da quantidade de numeros digitados e de %f.\n", media(a)); } float media (int a){ int i; float vet[a]; float q=0; for(i=0;i<a;i++){ do{ printf("Numero %d: ", i); scanf("%f", &vet[i]); }while(vet[i]<0); } for(i=0;i<a;i++){ q+=vet[i]; } return q/(a); } Agradecido por ajudar....
  18. Ah sim, verdade. Mudei meu codigo aqui. Valeu......
  19. @alecounter O que que voce mexeu, para me situar? Alem do : Sobre o ponteiro, eu ia utilizar ele, ai vi que nao era necessario e que tava esquentando cabeca à toa.
  20. Aqui esta o codigo: #include <stdio.h> #include <stdlib.h> struct gente{ char sexo[11]; char cor[11]; char cabelo [11]; int id; }; main(){ int e, *a; printf("Informe a quantidade de pessoas que passaram pela pesquisa.\n"); scanf("%d", &e); a=&e; struct gente aaa; void registro(int e); registro(e); void imprimir(struct gente *aaa, int e); imprimir(&aaa, e); }/* struct gente{ char sexo[11]; char cor[11]; char cabelo [11]; int id; };*/ void registro(int e){ struct gente aaa[e]; int i ; for(i=0;i<e;i++){ printf("Informe o sexo: "); scanf("%s%*c", &aaa[i].sexo); printf("Informe a cor dos olhos: "); scanf("%s%*c", &aaa[i].cor); printf("Informe a cor do cabelo: "); scanf("%s%*c", &aaa[i].cabelo); printf("Informe a idade: "); scanf("%d%*c", &aaa[i].id); } } void imprimir(struct gente *aaa, int e){ int i; printf("Fique agora com os dados das pesquisas.\n\n"); for(i=0;i<e;i++){ printf("A pessoa do sexo %s, ",aaa[i].sexo); printf("tem os olhos %s, ",aaa[i].cor); printf("tem os cabelos %s, ", aaa[i].cabelo); printf("tem a idade de %d anos.\n\n", aaa[i].id); } }
  21. Um dica: Quando for postar questoes aqui use a a ferramente code, ela nos auxilia a exengar melhor o codigo.
  22. Olá, amigos. Como vão? Estava aqui programando e tentei fazer um programinha que fosse dividido em partes (meu conceito de funcao, ahaha). So que nao estou conseguindo fazer com que a funcao imprima a estrutura. Segue como ficou a funcao registro o e de imprimir; void registro(int e){ struct gente aaa[e]; int i ; for(i=0;i<e;i++){ printf("Informe o sexo: "); scanf("%s%*c", &aaa[i].sexo); printf("Informe a cor dos olhos: "); scanf("%s%*c", &aaa[i].cor); printf("Informe a cor do cabelo: "); scanf("%s%*c", &aaa[i].cabelo); printf("Informe a idade: "); scanf("%d%*c", &aaa[i].id); } } void imprimir(struct gente *aaa, int e){ int i; printf("Fique agora com os dados das pesquisas.\n\n"); for(i=0;i<e;i++){ printf("A pessoa do sexo %s, ",aaa[i].sexo); printf("tem os olhos %s, ",aaa[i].cor); printf("tem os cabelos %s, ", aaa[i].cabelo); printf("tem a idade de %d anos.\n\n", aaa[i].id); } } Só na hora de imprimir que esta aparecendo lixo de memoria.
  23. @giu_d Opa, valeu amigo. Nessa parte : voce faz para achar a diagonal secundaria. Eu no caso faco da seguinte forma para achar a diagonal secundaria. if(i==4-1-j) // ou if(j==4-1-i) Mas no caso, o exercicio pede que ache o menor numero ACIMA da diagonal secundaria. Ai achei eu formula ai. OBS: Eu cheguei ate a diminuir o o tamanho da matriz para ficar mais fácil confirir os numeros acima.
  24. So para finalizar, nao hora de eu passar a matriz para funcao eu acabei colocando o '&', sendo que nem faço isso com vetor. então depois das mudancas que voce mostrou ai acima, ainda modifiquei o seguinte trecho: Agora esta tudo beleza.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!