Ir ao conteúdo

isrnick

Membro Pleno
  • Posts

    1.558
  • Cadastrado em

  • Última visita

Tudo que isrnick postou

  1. 1- Crie um terceiro vetor, grande o suficiente para armazenar o alfabeto inteiro 2- Use ciclos para fazer o programa copiar os conteúdos dos vetores vogais e consoantes para o vetor do alfabeto 3- Aí basta usar um algoritmo de ordenação para ordenar as letras/caracteres dentro do vetor do alfabeto, os algoritmos mais usado por iniciantes são Bubble Sort (ordenação por flutuação), Insertion Sort (ordenação por inserção), e Selection Sort (ordenação por seleção), escolha e use um deles. 4- Imprime o alfabeto armazenado no vetor É importante entender que o tipo char é um tipo inteiro: E como caracteres na verdade são números, e o alfabeto está ordenado em sequência na tabela ASCII (de 'a' até 'z'), é possível comparar os caracteres: 'c' > 'a' //verdadeiro 'd' < 'b' //falso
  2. Abra o cmd.exe e digite chcp para ver a página de código ativa do seu cmd.exe, normalmente é a code page 850 no Windows PT-BR. Então segue um link com a lista dos caracteres da code page 850: https://www.ascii-codes.com/cp850.html (Tem outras code pages listadas nesse site, é só clicar no respectivo número no menu no topo.)
  3. menu() é uma função, e deve ser chamada para ser executada. No caso deve chamar a função menu(); dentro da função main() (no local apropriado), e usar if-else-if ou então switch-case para realizar uma das operações de inserir cadastro, ou exibir cadastros, conforme a opção escolhida e retornada pela função menu(). #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 5 typedef struct pessoa { char nome[10]; char livro[10]; int cod; char autor[10]; char obra[10]; char editora[10]; } tipo_pessoa; int menu() { int opcao; printf("\n\n ==== MENU DE opções ====\n"); printf("0 - ENCERRAR PROGRAMA. \n"); printf("1 - INSERIR CADASTRO\n"); printf("2 - EXIBIR TODOS \n"); printf("\nO que deseja fazer? "); scanf("%d", &opcao); return opcao; } int main() { tipo_pessoa lista[TAM]; int i = 0, j, opcao; do { opcao = menu(); switch (opcao) { case 1: if (i < TAM) { lista[i].cod = i; printf("Insira o nome da pessoa %d: \n", i + 1); gets(lista[i].nome); fflush(stdin); printf("Insira o nome do livro %d: \n", i + 1); gets(lista[i].livro); fflush(stdin); printf("Insira o nome do autor %d: \n", i + 1); gets(lista[i].autor); fflush(stdin); printf("Insira o nome da obra %d: \n", i + 1); gets(lista[i].obra); fflush(stdin); printf("Insira o nome da editora %d: \n", i + 1); gets(lista[i].editora); fflush(stdin); i++; } else { system("cls"); printf("Sistema de cadastro lotado. Não é possível armazenar mais informações!\n\n"); } break; case 2: for (j = 0; j < i; j++) { printf("%s - %d - %s - %s - %s - %s\n", lista[j].nome, lista[j].cod, lista[j].livro, lista[j].autor, lista[j].obra, lista[j].editora); } break; case 0: printf("Programa finalizado.\n"); break; default: printf("Opcao invalida.\n"); } system("pause"); } while (opcao != 0); return 0; } Também coloquei um do-while para continuar o programa enquanto não digitar 0 no menu. Mas não testei o código, teste e me diga se der algum erro.
  4. O typedef está incompleto, está faltando "} tipo_pessoa;" no fim. Leia minha assinatura abaixo para ver como postar código no fórum.
  5. Especificação do WMF: http://www.fileformat.info/format/wmf/egff.htm
  6. Existem vários sites listando as vantagens e desvantagens da linguagem C++, e costumam apontar basicamente as mesmas desvantagens. Segue link de um deles: https://pt.wikiversity.org/wiki/Introdução_às_Linguagens_de_Programação/C_e_C%2B%2B#Desvantagens_2
  7. Isto cria uma constante de caracteres, mas como não colocou o tipo o compilador assume que é o tipo padrão: int O que precisa fazer é isso: const char *nome = "alessandro"; //Ou isso: const char nome[] = "alessandro"; Assim cria um ponteiro (ou vetor) nome que aponta para a constante de caracteres (string constante). Com o ponteiro/vetor é possível acessar caracteres individualmente nome[0] == 'a', nome[1] == 'l', etc, o que é importante para conseguir resolver o exercício. E char é um tipo inteiro: Logo, como caractere na verdade é um número, é possível guardar em uma variável do tipo int, e é o que você deve fazer guardar cada caractere da string em uma posição do vetor de inteiros: vetor[0] = nome[0]; vetor[1] = nome[1]; etc Mas vai fazer isso automaticamente usando um ciclo. E leia minha assinatura abaixo para ver como postar código no fórum sem correr o risco do fórum fazer alterações que quebrem a lógica do programa.
  8. @Igor Hugentobler Tá quase certo, o único problema agora é que o valor de fat precisa voltar a ser igual a 1 após antes de calcular um novo fatorial, senão vai ficar multiplicando pelo o valor do fatorial calculado anteriormente, e vai continuar crescendo absurdamente.
  9. Seu programa incrementa n no for externo, e decrementa o n no for interno, então nunca chega em n = 10, logo nunca sai do for externo. Para corrigir copie o valor de n para o outra variável no segundo for, e aí esse for decrementa essa outra variável, e não altera n.
  10. @inesfcfs99 Esse tópico é de 2010, e segundo o perfil do criador do tópico ele não acessa o fórum CdH desde 2010, qual o sentido de ressuscitar esse tópico para comentar isso?
  11. Isso pode ser entendido como uma somatória assim: onde fk(x) é o k-ésimo termo da somatória e: para k = 0 temos: f0(x) = x para k > 0 temos: fk(x) = fk-1(x) * (-1) * (x * x) / ( (2*k + 1) * (2 * k) ) Observe que o próximo número da somatória depende do anterior, e o sinal inverte pois o próximo será calculando multiplicando o anterior por (-1).
  12. A função toupper() faz parte da biblioteca ctype.h mas não foi incluída no programa, então inclua ela e veja se resolve o erro. #include <ctype.h>
  13. Só aprendendo a linguagem C e usando os comandos e controles equivalentes aos do Portugol. A sequência lógica seria praticamente igual, mas a sintaxe muda significativamente de um para o outro, não dá pra fazer uma tradução direta ou automática.
  14. isrnick

    C Erro de debug e compilação

    @Lobarinhas como a função main() é do tipo int ela deve ter um return 0 na última linha, independentemente de se tiver um system("pause") antes ou não.
  15. isrnick

    C Erro de debug e compilação

    Não vai & antes de nome no scanf() pois nesse caso nome é um vetor. E acredito que o system("pause") está no lugar errado, deveria ser após o segundo printf, e já que vamos move-lo é melhor trocar por getchar(). #include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { char nome[30]; printf("\nInsira o nome do aluno: \n"); scanf("%s", nome); getchar(); printf("Bem vinda a disciplina de algoritmos 2 %s",nome); getchar(); return 0; } Jamais se "tira o return" de uma função com tipo diferente de void, a função main é do tipo int logo deve retornar um número inteiro, no caso retorna 0 (zero) para informar para o sistema que o programa foi concluído corretamente, sem ocorrer erro ou interrupção inesperada.
  16. O que acontece quando faz isso? Deveria funcionar.
  17. Mude: if(c != ' '){ Para: if(c != ' ' && c != '\n'){
  18. Como antes o problema é o mesmo: pos = k * (sizeof(int) + sizeof('\t')); sizeof(int) é igual a 4 bytes, mas você não guardou como int no arquivo, mas sim usou fprintf para converter o número inteiro em uma string de caracteres e escrever a string no arquivo de texto. if(padraoDesbloqueio[i] >= 0 && padraoDesbloqueio[i] <= 8){ fprintf(arq, "%d\t", padraoDesbloqueio[i]); } Mas como os valores salvos só vão de 0 a 8 então a string sempre terá apenas 1 caractere. Logo, seguindo sua lógica o correto seria: pos = k * (sizeof(char) + sizeof('\t')); Mas char tem apenas 1 byte, e '\t' também é 1 único caractere logo também ocupa 1 byte, então: pos = k * (sizeof(char) + sizeof('\t')); //é igual a: pos = k * (sizeof(char) + sizeof(char)); //que é igual a: pos = k * (1 + 1); //E finalmente obtemos: pos = k * 2;
  19. Para postar código use a o botão <> no topo do campo onde você digita a resposta do tópico. Não deve ser feita a entrada da mensagem pelo usuário dentro das funções criptografa e descriptografa, essas funções já receberão a mensagem pronta e um de seus parâmetros, e deve apenas modificar/alterar a mensagem, criptografando ou descriptografando ela. adicionado 28 minutos depois Edit: @João Vitor Sacramento Rocha O programa que você postou originalmente ao menos usava funções para criptografar, que é o que o enunciado pede pra fazer (pede apenas essas funções, não um programa completo, mas pode fazer o programa para testá-las). Este que você editou e colocou aqui no tópico (que foi copiado daqui https://br.answers.yahoo.com/question/index?qid=20150628101623AACByz9 ) não usa funções logo não atende o que o exercício pede.
  20. O tipo char é um tipo inteiro: E como caracteres na verdade são números é possível fazer operações matemáticas entre eles, e como os caracteres dos números estão em seqüência (0 até 9) na tabela de caracteres podemos apenas subtrair '0' do caractere para obter o número inteiro correspondente: vet[0] = s[0] - '0'; //= '1' - '0' = 1 vet[1] = s[1] - '0'; //= '0' - '0' = 0
  21. Veja se funciona: void testarPadrao(){ FILE *arq; bool correto = true; int ponto, i = 0, k = 0; int padraoDesbloqueio[41]; if(!(arq = fopen("padrao_desbloqueio.txt", "r"))) printf("\nErro ao tentar abrir arquivo!\n"); else{ //fseek(arq, 0, SEEK_END); //long tam = ftell(arq); while(fscanf(arq, "%d", &ponto) == 1) { printf("\nPonto %d do padrão: ", k); scanf("%d", &padraoDesbloqueio[k]); //fseek(arq, i, SEEK_SET); //fscanf(arq, "%d", &ponto); printf("\n"); if(ponto != padraoDesbloqueio[k]){ correto = false; break; } //i = i + k * (sizeof(int) + sizeof('\t')); k++; } if(correto) printf("\nPadrão correto!\n"); else printf("\nPadrão incorreto!\n"); } }
  22. Se entendi direito seria algo assim (?) : #include <stdio.h> #include <string.h> int main() { const char *s = "1000"; int vet[strlen(s)]; printf( "A string s: %s\n" "Tamanho do vetor de inteiros: %d\n", s, sizeof vet / sizeof *vet ); return 0; }
  23. @Gabbie1 a solução do @Flávio Pedroza funciona sem ponteiros, declarou a variável tamanho como uma variável global, esse tamanho não é o tamanho real usado na declaração do vetor, mas sim uma variável que indica quantas posições do vetor estão sendo usadas (e o restante do vetor é ignorado). Veja o vetor poderia ter qualquer tamanho: int tamanho = 10; (...) void remover (int v[1000], int pos){ int i; for (i=pos+1;i<tamanho;i++){ v[i-1] = v[i]; } tamanho--; } Aqui o vetor tem 1000 posições mas nosso tamanho só tem valor muito menor pois na verdade indica quantas posições estão sendo usadas, e pode ser decrementado (ou incrementado) conforme for necessário.
  24. Não dá, o tamanho do vetor é fixo, o tamanho indica quanta memória foi alocada para o vetor, e continua alocado até não precisar mais do vetor, e aí desaloca o vetor inteiro automaticamente. Nesse caso o fato de ter o valor duplicado é irrelevante, você poderia ignorar o tamanho real do vetor e considerar apenas parte dele como sendo a parte que contém informação relevante. Outra opção seria colocar um valor inválido para a sua situação na posição final, por exemplo em um caso que somente valores maior que zero são guardados no vetor poderia usar 0 ou um número negativo para indicar que a posição não é considerada parte do vetor. Mas para fazer o que você está pensando seria necessário lidar com alocação dinâmica (malloc() ou calloc() no C), nesse caso você mesmo programaria a alocação de memória, e então poderia usar realloc() para realocar a memória com tamanho diferente, nesse caso um tamanho menor.
  25. Você está tentando fazer algo mais complexo do que o enunciado pede, o enunciado diz que deve decodificar o texto do arquivo original em um novo arquivo, não no próprio arquivo original. Então abra 2 arquivos ao mesmo tempo o arquivo original em modo de leitura, e o novo arquivo em modo de escrita, aí leia o texto do arquivo original e escreva o texto decodificado no arquivo novo.

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!