Ir ao conteúdo
  • Cadastre-se

Josesousa

Membros Plenos
  • Total de itens

    129
  • Registro em

  • Última visita

  • Qualificações

    N/D
  1. Josesousa

    C RESOLVIDO Algoritmo de string em C

    Poste o que você fez até agora. Para corrigirmos. Mas caso realmente não tenha ideia de como começar, vou tentar explanar o que entendi. (Não sei o seu nível de conhecimento) Pergunte ao usuário para informar o tamanho da palavra. Dentro de um loop deve haver ... Você vai pedir o usuário para digitar uma letra. scanf("%c", &string); E a cada letra digita ela deve ser copiada para uma string; Dentro do loop haver um contador, sempre há na verdade, e fazendo uso do realloc e aumentando o tamanho da string a medida que o loop não termine. Por fim termine a string com um "\0". E peça ao usuário digitar um símbolo, se for = mostre a string, senão não. Eu tentaria assim, me diga se deu certo. E poste seu código, por favor.
  2. @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.
  3. @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.
  4. 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.)
  5. 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.
  6. 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;*/ }
  7. @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.
  8. @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.
  9. 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.... ...
  10. @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....
  11. @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.
  12. 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)
  13. 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!
  14. @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.
  15. 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); } }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×