Ir ao conteúdo
  • Cadastre-se

UmPrograma

Membro Pleno
  • Posts

    182
  • Cadastrado em

  • Última visita

Tudo que UmPrograma postou

  1. @Manu Duarte Eu perguntaria ao usuario quantos alunos serão lidos a nota. E resolveria com um for, pois para mim o programa vai parar quando não tiver mais aluno para ler a nota, ou seja, zero alunos. E guardaria as notas num vetor, para assim eu ter como comparar a melhor e pior nota. E depois fazer a media. (MAS DA PARA RESOLVER SEM SER ASSIM) Um erro que tambem apresenta no seu programa e na hora de mostrar a maior e menor nota. Nao se utiliza o operador &, ao menos que queira ver o endereco de memoria, mas ainda teria que usar o formatador %p. #include <stdio.h> #include <stdlib.h> int main() { int numero=0, nota=0, maior=0, menor=0, i=0; // INICIALIZANDO COM ZERO do{ printf ("Introduza o seu numero de aluno. Para finalizar introduza 0\n"); scanf ("%d",&numero); if(numero==0) // AQUI O PROGRAMA IRA PARA DE EXECUTAR CASO O NUMERO DIGITADO SEJA ZERO. break; printf ("Introduza a sua nota Na cadeira\n"); scanf ("%d", &nota); if(i==0){ // AQUI FOI PARA SOMENTE NA PRIMEIRA VEZ O PROGRAMA ATRIBUIR O VALOR DA NOTA AS VARIAVEIS, OU TODA VEZ QUE maior=nota; // QUE FOSSE LER ELE IA ATRIBUIR menor=nota; } i++; if (nota>maior) { maior=nota; } if (nota<menor) { menor=nota; } }while (numero != 0); printf ("A melhor nota e %d\n", maior); // NAO SE UTILIZA O '&' PARA MOSTRAR O CONTEUDO DA VARIAVEL printf ("A pior nota e %d\n", menor); return 0; } COMENTEI O CÓDIGO, ESPERO QUE CONSIGA ENTENDER E CONTINUE ESTUDANDO.
  2. @Igor Vargas Uai, estava estudando por meio de vídeos no youtube e alguns site e livro, pensei que era "obrigatório". (Na verdade pensei que não faria diferença) Pois no caso eu escrevi struct lista e usei Lista como nome da variavel, só que com a inicial maiúscula. Parte obrigatoria do exercicio. Valeu, Igor,
  3. @Igor Vargas Acho que estou entendendo. Entao a lista Lista serve apenas para criar outras struct...? Pois em seguida a usei para criar a "l" e a "novo" e as auxiliares. Minha maior duvida era com isso de apontar para o proximo. Vou tentar praticar mais. E desenhar como sugerido. Valeu, amigo...
  4. @AnsiC A struct que inicia o codigo e obrigatoria no exercicio bem como o retirar elemento. Em relação ao seu codigo, achei muita mais difícil. Nao sei se pelos nome que voce usou. e sobre o adicionar a lista, no caso seu já vem pronto. Eu queria que o usuario escrevesse seu numero. O que concertou no meu codigo? Realmente nao entendi sua funcao adicionar, e ele ainda é do tipo bool. Não sei o que é isso. Nao sei o que é isso de volatile. Porque?Porque? adicionado 12 minutos depois @Igor Vargas Realmente sua função inserir está muito mais fácil, até de entender. Aí no caso a variável valor iria passar para a lista e função a valor que foi digitado no main. Pois quero que o usuário digite o valor, e não já esteja pré-definido. Mas e o resto da função, tudo certo ou tem algum erro? Sobre a dica de desenhar, acho que vou segui-lá pois realmente não estou entendendo esse tanto de função para ler somente uma variável. adicionado 16 minutos depois /////////////////////////////////////////////////////////////////////////////////////////////// Uma coisa que realmente não entendo é isso de na hora de fazer o novo apontar para o proximo elemento da lista seguir o seguinte modelo: novo->prox = l ; Para mim parece que o "novo" está recebendo tudo o que tem no 'l' , e dessa forma parece que o "novo->info" perde o valor que eu coloquei. Não é intuitivo entender essa matéria.
  5. @AnsiC Você conseguiu rodar e deu tudo certo? Na verdade peguei uns programas parecidos e tentei analisa-los e tentei fazer o meu, que nao funcionou direito, so que ainda nao entendo isso de uma estrutura cabeça e um monte de estruturas que fazem uso dela. (nao sei se da para entender, mas no codigo por exemplo a Lista l e a Lista novo vem da lista Lista, não consigo compreender muito bem isso.) Aqui no meu compilador nao deu para rodar nao, so no site https://repl.it/repls/BlueSilverShell . Ainda me perco com essas Listas, pois a Lista l parece ser mais importante por ser o nó, mas é na Lista novo que as informações estão e a nó parece que serve apenas para ligar. Nao sei..... Aí funcionou??? adicionado 17 minutos depois Tem uma funcao que um monte de codigo usa que e a seguinte. int vazia(Lista *node){ if(node->prox==NULL){ return 1; } else return 0; } Tentei substituui-la pelo if (l!=NULL), nao sei se e a mesma coisa. Julguei ser esse o motivo do meu problema de o codigo nao rodar. To muito perdido.
  6. Uai porque nao estou conseguindo fazer o programa rodar no code blocks, parece esta demorando mais do que o necessario (demorando como nas funcoes recursivas kkkk), mas no site Repl.it esta funcionando o código. Se alguem puder me dar uma luz. (E uma leve explicacao. Esse conteudo confunde muito.)
  7. Olá, boa tarde pessoal. Estava tentando resolver um exercício em de lista encadeada aqui, mas estou com muita duvida ainda. Principalmente que parece para a resolução dão problema a gente deve ir criando varias outras struct's. No exercício proposto pelo professor ele pede que seja retirado o ultimo elemento da lista. No entanto não estou conseguindo resolver o problema. (Estou buscando ajuda em um livro que tenho aqui( de Waldemar Celes, introdução a estrutura de dados) e pela própria Internet. Mas confesso que esta muita difícil assimilar algo.) Caso possam, olhem o o meu código. #include <stdio.h> #include <stdlib.h> /// o l é o nó, que liga as cadeias. struct lista{ int info; struct lista* prox; }; typedef struct lista Lista; void inserir(Lista *l){ Lista* novo= (Lista*)malloc(sizeof(Lista)); if(!novo){ printf("SEM MEMORIA!\n"); exit(1); } printf("\nInforme um valor: "); scanf("%d", &novo->info); if(l!=NULL){ l->prox=novo; } else{ Lista *aux = l-> prox; while(aux->prox!= NULL){ aux=aux->prox; } aux->prox=novo; } } Lista *retira_ultimo(Lista *l){ if(l!=NULL){ printf("Lista vazia.\n"); return NULL; } else{ Lista *ultimo = l->prox, *penultimo = l->prox; while(ultimo->prox!=NULL){ penultimo=ultimo; ultimo=ultimo->prox; } penultimo->prox=NULL; return ultimo; } } main(){ int op=1; Lista *l= (Lista*)malloc(sizeof(Lista)); l ->prox = NULL; Lista* novo= (Lista*)malloc(sizeof(Lista)); inserir(l); while(op==1){ printf("Inserir novo elemento: 1 <sim> outro valor <nao> : ");scanf("%d", &op); if (op==1) inserir(l); } retira_ultimo(l); printf("\n\nA lista depois de retirar o ultimo numero digitado e o seguinte.\n\n"); if(l!=NULL){ printf("Lista vazia.\n"); } Lista *aux = l->prox; while(aux!=NULL){ printf("%d\n", aux->info); aux=aux->prox; } return 0; } Tenho muita dificuldade na estrutura "cabeça" e na necessidade de se criar um monte de struct a partir dela.
  8. Noite pessoal. Estou tentando criar um programa que some todos os valores pares de um vetor. No entanto nao estou tendo exito. Quando faco com iteracao, funciona perfeitamente. Mas com recursão já não. Tem horas que parece que esta somanto o tamanho do vetor tambem Se puderem ajudar, agradecido. (No código está a resolução comentada de como seria com a iteração #include <stdio.h> #include <stdlib.h> #include <locale.h> ///Somar os pares por recursividade int somar(int tam,int ,int *vet); main(){ int *vet, tam,i; setlocale(LC_ALL,"Portuguese"); printf("Informe o tamanho do vetor: "); scanf("%d", &tam); vet = (int *) calloc (tam, sizeof(int)); if(!vet){ printf("Problema com alocação de memória!\n"); exit(1); } printf("Entre com os valores do vetor.\n"); for(i=0;i<tam;i++){ printf("Vetor [%d]: ",i); scanf("%d", &vet[i]); } int soma=0, b=0; soma = somar(tam,b,vet); printf("\nA soma dos pares e %d.\n", soma); } int somar(int tam,int b, int *vet){ int i, soma=0; if(vet[tam]==vet[b]){ return soma; } else{ // somar(tam, b+1, vet); //if(vet[b]%2==0) //soma = soma + vet[b]; return somar(tam,b+1, vet)+vet[b]+(vet[b]%2==0); } /*for(i=0;i<tam;i++){ if(vet[i]%2==0){ soma=soma+vet[i]; } } return soma;*/ }
  9. @AnsiC Entao nao precisa se o codifo todo de forma recursiva nao né? Essa é a minha maior dificuldade. Fiz a funcao da seguinte forma: return vet[n-1]/(float)j + media(vet, n-1,j); adicionado 14 minutos depois @AnsiC Não sei porque, mas nao estou conseguindo fazer o somatório dos valores do vetor. Da seguinte forma esta muito errado? (depois disso eu dividiria a soma pela quantidade de números) somar=somar+media(j,vet[j+1], n); Tem alguma aritmetica de ponteiros? Pois quando tento fazer dentro da recursao mostra erro o tempo todo. Aí estou tentando somar os valores pelo indice, mas nao esta dando certo.
  10. @AnsiC Na verdade eu queria somar tudo primeiro e depois dividir pela quantidade. Mas nao estava dando certo. Queria que ficasse igual ao codigo comentado. Ai decidir dividir cada termo e depois somar, mas nem assim deu certo.
  11. Olá, bom dia. Poderiam dá uma olhada no meu código de um exercício que calcule a media. Eu normalmente tento fazer com uma função normal, e depois passar para a função recursiva, mas não estou conseguindo essa ultima etapa. Segue o codigo: /*46) Faça uma função recursiva que permita calcular a média um vetor de tamanho N.*/ #include <stdio.h> #include <stdlib.h> #include <locale.h> int entrada(int *vet, int n); void imprimir(int *vet, int n); float media(int *vet, int n,int ); main(){ int *vet, n, j=0; float md; setlocale(LC_ALL, "Portuguese"); printf("Informe o tamanho do vetor: "); scanf("%d", &n); vet = (int *)malloc(n*sizeof(int)); if(!vet){ printf("Problemas com a alocação de memória.\n"); exit(1); } entrada(vet, n); imprimir(vet,n); md=media(vet, n, j); printf("\n\nA media do vetor e de %f.", md); } int entrada(int *vet, int n){ int i; printf("Entre com os valores do vetor.\n"); for(i=0;i<n;i++){ printf("Vetor [%d]: ", i); scanf("%d", &vet[i]); } } void imprimir(int *vet, int n){ printf("\n\nO vetor é o seguinte.\n"); int i; for(i=0;i<n;i++){ printf("Vetor [%d]: %d.\n", i, vet[i]); } } float media(int *vet, int n , int j){ float somar=0, i=0; /*for(i=0;i<n;i++){ somar += (*vet)++; } somar=somar/n; return somar;*/ if(n==1){ return vet[0]/n; } else{ return (media(vet, n-1,j+1)+vet[j]/n); } } adicionado 22 minutos depois Consegui.... ...
  12. @AnsiC Para ter um subconjundo nao deveria ter dois vetor, e um esta "dentro" do outro.? adicionado 4 minutos depois Alias, isso de conjunto potencia, nao entendi bem....
  13. @Foxwalt Não quero a resposta pronta nao amigo. Entendo sim que a pessoas que fazem/pedem isso aqui, o que quero é que alguem me clarei o que o exercicio quer exatamente. Num sei se é para criar varias variaveis e elevalas ao mesmo expoente.
  14. Boa tarde, como vão? Estou a resolver um exercício de recursividade. Ainda encontro dificuldades com funções recursivas, mas estamos indo. Nesse exercício em específico não consegui entender o que estava sendo pedido. Segue o enunciado: Escreva um algoritmo recursivo capaz de gerar todos os elementos do conjunto potência dado um conjunto formado por letras. PARA FICAR CLARO! NÃO PRECISO QUE RESOLVAM PARA MIM, APENAS ME DIGAM O QUE O EXERCICIO QUER EXATAMENTE. De primeira achei que era para criar varias variaveis e elevalas ao mesmo expoente, mas acho que nao seria isso. Sobre elavar ao expoente usando recursao eu ja fiz, mas esse exercicio nao ficou claro exatamente o que ele esta querendo. (Professor nao soube me explicar)
  15. Nessa parte , o vetor 3 será preenchido depois ja esta ter sido totalmente preenchido com o vetor 1. Ai o i1 tem o valor do vetor 1, e na hora de preenchar o vetor 3 comecar daí em diante. É isso? (O meu tava bem diferente, hein!?!, Ia da certo nunca (talvez desse). Estava tentando seguir a mesma logica de quando é sem recursão) Valeu!
  16. @AnsiCSim, é isso. Acho que seria juntar os dois vetore em um só, que no caso seria o vetor 3. E no exercicio pede para desconsiderar a existencia de numeros reperidos no vetor. Que facilita a vida. Mas estou tendo problemas de lixo de memoria em algumas posições.
  17. Olá, bom dia. Estava a resolver um exercicio proposto pelo professor (na verdade como comecamos a materia agora ele iria resolver para nos ensinar, so que ele nao conseguiu encontrar o erro que tinha no seu codigo, aliás nem rodou). Pois bem, eu tentei resolver o problema da mesma forma que resolveria se nao pedisse recursividade, a diferença seria que no caso teria dois if, porém nao da certo quando faco dessa forma. Entao, tentei fazer num if apenas, porém está apresentando problemas na hora de unir os vetores. Não sei bem o que esta acontecendo, sei que algumas posições do vetor é preenchido por lixo na memoria. (Se puderem me ajudar no que eu coloco no primeiro if , agradeceria. Fico na dúvida no que ponho pois sem recursividade não precisamos testar nada) Segue o código: #include <stdio.h> #include <stdlib.h> int unir(int *vet1, int *vet2, int *vet3, int tam1, int tam2, int l, int m); main(){ int tam1, tam2, i; printf("Qual o tamanho do vetor 1: ");scanf("%d", &tam1); printf("Qual o tamanho do vetor 2: ");scanf("%d", &tam2); int *vet1, *vet2, *vet3; vet1 = (int *) malloc(tam1*sizeof(int *)); vet2 = (int *) malloc(tam2*sizeof(int *)); vet3 = (int *) malloc((tam1+tam2) * sizeof(int *)); printf("\nPrencha agora o vetor 1.\n"); for(i=0;i<tam1;i++){ printf("Vetor [%d]: ",i); scanf("%d", &vet1[i]); } printf("\nPrencha agora o vetor 2.\n"); for(i=0;i<tam2;i++){ printf("Vetor [%d]: ",i); scanf("%d", &vet2[i]); } int l,m; l=0,m=tam1-1; unir(vet1, vet2, vet3, tam1-1, tam2-1, l,m); printf("\nAgora serao impressos o vetor 3.\n"); for(i=0;i<tam2+tam1;i++){ printf("Vetor [%d]: %d.\n",i,vet3[i]); } } int unir(int *vet1, int *vet2, int *vet3, int tam1, int tam2, int l, int m){ int i, a=tam2, b=tam1, j=0; if(i==0){ /// O QUE EU PONHO AQUI?????, coloquei i == 0, pois sei que é falso. Pelo menos assim esta rodando, o que /// nao acontece se eu colocasse tam1==0 && tam2==0. } /*else if(tam1>0){ vet3[l]=vet1[l]; //vet3[tam2]=vet2[tam2]; vet3[m]=vet2[l]; return unir(vet1, vet2, vet3, tam1, tam2, l+1, m+1); /// A um erro Aqui }*/ else if(tam1!=0){ vet3[l] = vet1[l]; vet3[m] = vet2[l]; unir(vet1, vet2, vet3, tam1, tam2, l+1, m+1); } }
  18. Bom dia. So uma pergunta rapida na alocação de memoria com o struct o codigo ficaria da seguinte forma, nao é mesmo. struct pessoa *dados; dados=(struct pessoa*)malloc(sizeof(struct pessoa)); E no caso eu nao posso por o tamanho da struct (struct pessoa *dados[num]. Faria igual na matriz e no vetor. Isso mesmo ne? (fiz assim e ta funcionando.) Eu devo multiplicar num * sizeof no mallo? E sobre o do free, eu fiz da seguinte maneira. free(dados); Certo? (Acho que difere apenas na matriz, liberação da matriz que tem que usar um for)
  19. @isrnick Isso é para o lixo de memoria?
  20. @isrnick Foi isso que achei massa da funcao, é que de inicio me perdi um pouco. Agora colocando para rodar o programa , nao rodou não. Mas de qualquer forma, obrigado a todos aí.....
  21. Para mim era mais intuitivo trabalhar usando ponteiro para ponteiro pois estavos fazendo algo similar (ponteiro para inteiro) no vetor. @AnsiC Por isso que não estava entendendo o link que voce enviou, pois lá, se me recordo, não falava sobre criar dinamicamente diretamente. Fora nas pesquisas que fiz encontrei somente usando de ponteiro para ponteiro. Sobre a funcao libera eu cheguei a modificar o meu aqui. Colocando num for, so que parece que liberaria so a segunda dimensao, baseando no codigo do @giu_d @isrnick Nome de funcao estranha, ainda mais com esses paranteses separando ele do seu tipo. Parece uma matriz, ainda mais com esses colchetes no final. E aqui embaixo voce não colocou o igual lá em cima (sem o * e o parenteses). São tantas nuances. MAS LEGAL SABER DESSA POSSIBILIDADE.
  22. @devair1010 Quando se eleva uma matriz a pontecia nao seria multiplicar ela por ela mesma ate a pontencia desejada?
  23. @iHollyZinhO Nunca precisei usar a tabela Ascii, mas me tira uma dúvida. Quando a usamos precisamos declarar uma biblioteca ou bastaria apenas somar os valores como voce fez ai .(claro, tendo o conhecimento da mesma)?
  24. @Lucas Tezolini Herler Boa tarde. Pois bem, para resolver o problema bastaria uma funcao. Nessa única funcao voce vai passar as variaveis a e b por referencia, ou seja, usando o &. Dentro da funcao foi cria uma variavel temporia e pronto. main(){ int a,b; .... /// Desenvolve o seu codigo aqui, lendo as variaveis void troca(int *a, int *b); troca(&a,&b); } void troca(int *a, int *b){ int tem; tem= *b; *b=*a; *a=tem; }
  25. @AnsiC Acho que entendi. No caso um ponteiro aponta apenas para o primeiro elemento da matriz, ai teria que faze-lo apontar para a matriz inteira. * (* (arr + i) + j) = e a funcao malloc......ou calloc... adicionado 6 minutos depois Entao eu estava alocando parte a parte, e não diretamente.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!