Ir ao conteúdo
  • Cadastre-se

Edmorte

Membro Pleno
  • Posts

    172
  • Cadastrado em

  • Última visita

Tópicos solucionados

  1. O post de Edmorte em Ajuda com recursividade em c foi marcado como solução   
    Faz tempo que eu não entro no site, mas como recebi um email vim verificar, estava cansado de ninguém avaliar as respostas, mas curiosamente o usuário tinha voltado para agradecer, recebi um email e voltei.
     
    Também não resolvo programa para os outros, mas quando a complexidade é alta eu coloco um código para servir de plataforma para os iniciantes.
     
    Segue abaixo:
    #include <stdio.h>void minmaxrec(int* array, int length, int& min, int& max){ if(!length) return; if(array[length - 1] > max) max = array[length - 1]; if(array[length - 1] < min) min = array[length - 1]; minmaxrec(array, length - 1, min, max);}int main(int argc, char **argv) { int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int min = 100, max = 0; minmaxrec(array, 10, min, max); printf("min: %d, max: %d", min, max); return 0;} Eu não sei se eu alcancei a técnica TAIL recursion, mas tentei exemplificar ela.
     
    Rodando em: http://coliru.stacked-crooked.com/a/e092efe4501ad012
  2. O post de Edmorte em Preciso de ajuda PFVR. foi marcado como solução   
    Você declarou as strings como char.
     
    Declare uma em cada linha.
     
    Boa sorte.
  3. O post de Edmorte em cadastro arquivos bin (trabalho) foi marcado como solução   
    fread(&B, sizeof(Banda), 1, banda);while (!feof(banda)){ if (strcmp(B.nome, nome)==0){ cod_banda = B.cod_banda; } fread(&B, sizeof(Banda), 1, banda);}// Alteradorewind(album);fread(&A, sizeof(Album), 1, album);while (!feof(album)){ if (A.cod_banda2==cod_banda){ cod_cd=A.cod_cd; // Para cada album da banda rewind(musica); fread(&M, sizeof(Musica), 1, musica); while(!feof(musica)){ if (M.cod_cd2==cod_cd){ printf ("\n\tCodigo da Musica: %d\n", M.cod_musica); printf ("\tCodigo do CD: %d\n", M.cod_cd2); printf ("\tMusica: %s", M.musica); printf ("\tDuracao: %d\n", M.duracao); printf ("\tClassicacao: %d\n", M.estrelas); } fread(&M, sizeof(Musica), 1, musica); } } fread(&A, sizeof(Album), 1, album);} Desculpa a formatação ruim, conflito de editores.
     
    Acho que esse ajuste deve funcionar, fiz de cabeça aqui.
     
    Para cada album da banda, devemos ler suas músicas e imprimi-las. Coloquei o código dentro do IF, se o album é da banda faça, repita para o próximo album.
     
    Se não funcionar, upa os bin carregados que eu testo.
  4. O post de Edmorte em Algoritmos e programação II - Criptografia foi marcado como solução   
    Estava quase certo, então eu dei uma corrigida.
     
    Faça um teste de mesa que você vai entender.
     
    Você esqueceu de colocar o fim de string na nova string que você estava montando e esqueceu de tratar o espaço em branco.
     
    No mais foi um erro no loop, o primeiro loop anda 1 posição da palavra original, e para cada iteração dessa ele testa todas as outras do array alfabeto.
     
    O break otimiza o laço, terminando o laço interno, para prosseguir mais rápido. Afinal já encontramos o item, não há porque continuar procurando.
    #include <stdio.h>#include <stdlib.h>#include <string.h>int main() { char vetor_alfabeto[27]="abcdefghijklmnopqrstuvwxyz"; char vetor_matriz [27]="jdjnvjnjfgkfmldmknkbnkmvkk"; char vetor_analise[31]="meu nome completo"; char vetor_resultado[31]; int i, k; int tamanho = strlen(vetor_analise); for (k = 0; k < tamanho; k++) { for (i = 0; i < 27; i++) { if(vetor_analise[k] == vetor_alfabeto[i]) { vetor_resultado[k] = vetor_matriz[i]; break; } else if (vetor_analise[k] == ' ') { vetor_resultado[k] = ' '; break; } } } vetor_resultado[tamanho] = '\0'; printf("Resultado: %s\n", vetor_resultado); }
  5. O post de Edmorte em Exibição e Armazenamento de Dados em uma Lista Encadeada C foi marcado como solução   
    // Agora esses ponteiros serão globaisaviao* ini_av_ponto = NULL; voo* ini_voo_ponto = NULL;passagem* ini_pass_ponto = NULL; void inserir_aviao(){ aviao * prox_av_ponto; int resp_aviao; while(1) { // Essa é uma solução paleativa, prefiro outras, mas... // Desse modo vamos sempre inserir no começo da lista, é a forma mais simples prox_av_ponto = (aviao*)malloc(sizeof(aviao)); prox_av_ponto->prox_av = ini_av_ponto; // Esse é o novo começo da lista ini_av_ponto = prox_av_ponto; printf("\n"); printf("Digite o Modelo: "); scanf("%s", &prox_av_ponto->modelo); printf("Digite o Fabricante do Aviao: "); scanf("%s", &prox_av_ponto->fabricante); printf("Digite o Numero de Passageiros: "); scanf("%d", &prox_av_ponto->passageiros); printf("Digite o Comprimento do Aviao em Metros: "); scanf("%d", &prox_av_ponto->comprimento); printf("Digite a Altura do Aviao em Metros: "); scanf("%d", &prox_av_ponto->altura); printf("Digite a Velocidade Media do Aviao em KM: "); scanf("%d", &prox_av_ponto->velocidade); printf("Digite a Altitude Suportada do Aviao em Metros: "); scanf("%d", &prox_av_ponto->altitude); printf("Digite o Tipo de Motor do Aviao: "); scanf("%s", &prox_av_ponto->motor); printf("Deseja continua? <1> SIM <outro valor> NAO: "); scanf("%d", &resp_aviao); if(resp_aviao != 1) { break; } } printf("\n");}void imprimir_aviao(){ // Virou global //aviao * ini_av_ponto; aviao* prox_av_ponto = ini_av_ponto; while(prox_av_ponto != NULL){ printf("Modelo do Aviao: %s\n", prox_av_ponto->modelo); printf("Fabricante: %s\n", prox_av_ponto->fabricante); printf("Quantidade Suportada de Passageiros: %d\n", prox_av_ponto->passageiros); printf("Comprimento do Aviao em Metros: %d\n", prox_av_ponto->comprimento); printf("Altura do Aviao em Metros: %d\n", prox_av_ponto->altura); printf("Velocidade em KM: %d\n", prox_av_ponto->velocidade); printf("Altitude Suportada do Aviao em Metros: %d\n", prox_av_ponto->altitude); printf("Tipo de Motor: %s\n", prox_av_ponto->motor); prox_av_ponto = prox_av_ponto->prox_av; }} Fiz uma adaptação aqui de cabeça, compila mas não sei se está ok a inserção. Acho que está.
     
    Claro que eu só fiz em um trecho do código o resto você adapta.
     
    Seu scanf está errado para char[], quando você usa array não deve passar o &, pois o array no C já é sempre passado por referência.
     
    Não se esqueça de antes de finalizar o programa desalocar toda essa memória. Tem que fazer um loop e ir desalocando item por item.
  6. O post de Edmorte em Problema ao usar ponteiros numa string em uma lista encadeada. foi marcado como solução   
    Sim, todo malloc tem um free associado a ele, por isso eu prefiro C++, posso encapsular a alocação dentro da classe e desalocar com RAII no destrutor. Mas todo malloc tem que ser liberado com free, senão você cria um memory leak.
     
    Esse uso que você fez é o que eu disse que não ia explorar, você deixou de usar o escopo automático que aloca o espaço na Stack e desaloca ao fim do bloco e usou o escopo dinâmico, aonde você pede memória do Heap e é responsável por devolver ela para o Sistema Operacional.
     
    Eu voltaria para o uso da Stack para casos mais simples. Você pode criar uma matriz char.
     
    Exemplo: char obras[n][20]. N obras de nome (tamanho máximo 19, tem sempre uma posição para fim de string).
     
    Se você usar malloc vai ter que gerenciar o tempo de vida para liberar quando para de usar, deixe para usar esse recurso quando você tiver mais experiencia.

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!