Ir ao conteúdo
  • Cadastre-se

ReginaldoPaz

Membro Júnior
  • Posts

    8
  • Cadastrado em

  • Última visita

Tudo que ReginaldoPaz postou

  1. #include<stdio.h> #include<stdlib.h> #include<string.h> int adicionarLinhas(int N, char *linha[N], char *string){ int tam = strlen(string); for(int i = 0; i < N; i++){ if(linha[i] == NULL){ linha[i] = (char*)malloc(tam*sizeof(char)); strcpy(linha[i], string); return 1; }else if(linha[i][strlen(linha[i]) - 1] == '\n'){ continue; }else{ linha[i] = (char*)realloc(linha[i], strlen(linha[i])+10); strcat(linha[i], string); return 1; } } return 0; } void imprimirLinhas(int N, char *linha[N]){ for(int i = 0; i < N; i++){ printf("%s", linha[i]); } } void liberarLinhas(int N, char *linha[N]){ for(int i = 0; i < N; i++){ free(linha[i]); } } int main(){ char str[10]; int N; scanf("%d\n", &N); char *linhas[N]; for(int i = 0; i < N; i++) linhas[i]=NULL; do{ fgets(str, 10, stdin); }while(adicionarLinhas(N, linhas, str)); printf("Texto liberado pelo Ministro\n"); imprimirLinhas(N, linhas); liberarLinhas(N, linhas); return 0; } Demorei postar porque esqueci. rsrsrs
  2. Documentação no site "cplusplus", apostilas e vídeos da faculdade, vídeos no youtube, enfim, uma série de recursos pra tentar entender. Agradeço aos que responderam. Consegui resolver a questão.
  3. Pessoal, estou com esse problema do curso pra resolver e estou muito perdido. Gostaria que se alguém pudesse esclarecer com código comentado pra eu entender principalmente sobre as funções que ele pede pra fazer com alocação dinâmica fico grato. (Já li algumas documentações e assisti alguns vídeos mas tá muito abstrato pra eu implementar na questão ) O presidente Chromonaro fez uma divisão igualitária da memória do computador para guardar um texto de várias linhas. Como o presidente não conhecia muito bem esse negócio de memória, resolveu chamar o Paulo Mozilla, Ministro da Economia de Memória, para dar uma olhada no planejamento e melhorar o que desse. - Sr. Presidente, claro que não vai caber na memória, tem um monte de linha desse texto que é muito menor do que a quantidade que o senhor disponibilizou, vai gastar, o Sistema Operacional não vai gostar. Falou o ministro desconfiado... - Tá OK! Vamo cortar isso aê. Disse o presidente em tom de ordem, depois de ouvir a sugestão do Ministro. Para dizer que entendia do assunto o Ministro rapidamente fez um rascunho de como ficaria o código: int main(){ char str[10]; int N; scanf("%d\n", &N); char *linhas[N]; for(int i=0; i<N; i++) linhas[i]=NULL; do{ fgets(str,10,stdin); }while(adicionarLinhas(N, linhas,str)); printf("Texto liberado pelo Ministro\n"); imprimirLinhas(N, linhas); liberarLinhas(N, linhas); return 0; } Mas na hora de implementar a função 'adicionarLinhas' o ministro entregou para você o trabalho. A função 'adicionarLinhas' deve receber a string como parâmetro que deve ser adicionada ao vetor 'linhas'. Veja que a string recebida pela função não corresponde a uma linha completa, assim antes de começar a preencher o próximo elemento no vetor linhas a função deve verificar se a ultima string adicionada tem um finalizador de linha '\n'. Além disso, por ordem do Ministro da Economia de Memória, o seu programa deve armazenar cada linha de texto em uma string com o tamanho exato para caber a linha toda. A função deve retornar 1 enquanto o vetor ainda tiver espaço e 0 quando não houver mais espaços e a última linha foi lida. Por fim você também precisa implementar as funções imprimeLinhas que imprime as linhas lidas e a função liberarLinhas que libera todas as linhas alocadas. Veja que, dependendo do valor de N, a entrada pode ser cortada, pois o Ministro resolveu cortar uma parte do texto que seria guardado a fim de economizar mais memória.
  4. @Lucca Rodrigues Então, eu pensei em criar uma função que verifica se o que foi digitado está dentro do char S[ ], no caso, pra saber se os caracteres digitados são válidos ou não e retornar esse valor. Porém, me atrapalhei na construção da semântica nessa função "validacao" em específico.
  5. Olá pessoal, eis-me aqui novamente. rsrsrs Precisando de uma ajuda nessa questão. (Obs. Meus professores têm uma criatividade singular) A República caiu. O perverso Império Galáctico, que tomou seu lugar, controla tudo e todos com mãos de ferro. Os poucos Jedis que sobreviveram à Ordem 66 estão dispersos pelo universo e a única esperança da galáxia é a resistência formada pela Aliança Rebelde. Como o Império monitora todas as transmissões, a única chance da Resistência é criptografar os dados antes do envio. Cabe a você, como o último sobrevivente de uma nobre ordem de desenvolvedores, implementar o algoritmo de criptografia que será utilizado nas transmissões de dados da Aliança Rebelde. Que a Força esteja com você! **** Implemente o algoritmo criptográfico da Aliança Rebelde. O programa deverá receber como entrada uma chave K de 4 dígitos decimais (0000 a 9999) e uma mensagem P de até 200 caracteres. Você deverá criar uma função que receberá P e K, transformando P na mensagem cifrada C a partir da aplicação da chave K. Como saída, o programa deverá imprimir a mensagem cifrada C. Caso seja informada uma chave fora do padrão, uma mensagem "Chave invalida!" deverá ser exibida. Os caracteres permitidos para as mensagens, tanto cifrada como original, são definidos no vetor a seguir, que deverá ser incorporado ao seu código: const char S[]= {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F','G','H','I','J', 'K','L','M','N','O','P','Q','R','S','T', 'U','V','W','X','Y','Z','.',',','?',' '}; Caso seja informado algum caractere diferente dos apresentados, o programa deverá exibir a mensagem: "Caractere invalido na entrada!". O funcionamento do algoritmo é baseado no deslocamento de cada caractere de entrada pelo número de vezes especificado pela chave naquela posição. Exemplos: Chave(K) : 0123 Mensagem(P): AAAABBBBCC Cifragem: AAAABBBBCC + 0123012301 = ABCDBCDECD Chave(K) : 6666 Mensagem(P): WXYZ1234 Cifragem: WXYZ1234 + 66666666 = ? 01789A Observe que está sendo usado o vetor S para o cálculo de substituição. Obs.: Este algoritmo é conhecido como Cifra de Vigenère. Por mais de 300 anos foi chamado de "le chiffre indéchiffrable" (a cifra indecifrável). Meu código: #include<stdlib.h> #include<stdio.h> #include<string.h> const char S[]= {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F','G','H','I','J', 'K','L','M','N','O','P','Q','R','S','T', 'U','V','W','X','Y','Z','.',',','?',' '}; int validacao(char *P){ //Principal problema está nessa função for(int i = 0; P[i] != '\0'; i++){ for(int j = 0; j < 40; j++){ if(P[i] != S[j]){ }}} void cifragem(int chave[], char *P){ int p = 0; for(int i = 0; i < strlen(P); i++){ for(int j = 0; j < 40; j++){ if(P[i] == S[j]){ j = j + chave[p]; if(j > 40){ P[i] = S[j%40]; }else{ P[i] = S[j]; } p++; if(p == 4){ p = 0; } } } } printf("%s", P); } int main(){ char K[7], P[200]; int chave[4], tamanho = 0, cont = 0, invalido; fgets(K, 7, stdin); fgets(P, 200, stdin); tamanho = strlen(K) - 1; invalido = validacao(P); if(tamanho > 4){ printf("Chave invalida!"); }else if(invalido == 1){//Problema para validar isso printf("Caractere invalido na entrada!"); }else{ for(int i = 0; i < tamanho; ++i){ chave[i] = K[i] - '0'; } cifragem(chave, P); } } Desde já, agradeço a ajuda.
  6. @Midori Obrigado. Entendi perfeitamente o que você fez. Abraço!
  7. Olá pessoal, estou começando na linguagem C e tô com esse problema pra resolver. Comecei o código mas em alguns testes propostos ele não funciona. Se alguém puder me ajudar fico grato. Problema "Um multiplexador é dispositivo que combina as sinais de múltiplas fontes em um único canal de saída. Crie um programa que simula um multiplexador para dois canais de entrada, A e B. Cada canal de entrada deverá receber uma string de até 40 caracteres. A saída C do multiplexador será os caracteres alternados de A e B. Caso um dos canais de entrada se torne ocioso (sem dados a processar), o canal de saída será ocupado pelos dados do canal remanescente. Exemplo: A=abc; B=defgh; C=adbecfgh". Testes Entrada 1 12345 abcde Saída 1 1a2b3c4d5e Entrada 2 Oamn l udo Saída 2 Ola mundo Meu código até então... #include<stdio.h> #include<string.h> int main(){ char A[40], B[40]; int tam; setbuf(stdin, NULL); fgets(A, 40, stdin); fgets(B, 40, stdin); tam = strlen(A) + strlen(B); char C[tam]; int j = 0; for(int i = 0; i < tam; i++){ else if(i%2 == 0){ C[i] = A[i - j]; j++; }else{ C[i] = B[i - j]; j++; } } printf("%s", C); }

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!