Prezados Ubundistas. Estou precisando resolver este programa em C, abaixo, mas não estou conseguindo, sera que voce poderia me ajudar.
UM ODIOSO E MALVADO PROGRAMA EM C Brincadeiras à parte, de fato existe um conjunto de números chamado Odious (de odd – paridade ímpar), cuja conversão binária possui um número ímpar de 1s. Qualquer número que não é considerado “odious” é considerado Evil (de even – paridade ímpar), significando que sua conversão binária possui um número par de 1s. Seu desafio nesta etapa será modificar um programa em C para que ele atenda aos requisitos listados abaixo: Algumas explicações sobre o que esses membros são capazes! ODIOUSRC – É o programa em C. Neste momento tudo que ele faz é listar números Odious e erros, mas iremos mudar isso! ODIOUS – É o arquivo de entrada com todos os números a serem verificados pelo programa. Ok, tudo certo? visualize os dois membros que foram criados, o ODIOUS e o OERROR. 1. Modifique o ODIOUSRC de forma a gerar um terceiro output. Seu programa já cria o ODIOUS e OERROR, agora deverá gerar o membro OEVIL, que imprime números “evil”. 2. Modifique o ODIOUSRC de forma a incluir duas linhas de cabeçalho em cada output: 1. Seu nome - Odious/Evil Number (ex: “Agatha Flesch – Odious Number” para um relatório de número odious, e assim por diante). 2. Linha em branco Nota: Se seu membro OERROR repetir as linhas duas vezes, você não completou esta parte com sucesso. Refaça seu código. ----------------------------- ODIOUSRC: ---------- #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> FILE *odiousFile; FILE *errorFile; FILE *inputFile; char buffer[81]; int bytesWritten; main() { int isOdious(int); int NumberOfOnes; int i; /*************************************/ /* Open file to write output */ /*************************************/ odiousFile = fopen("DD:ODIOUS", "w"); if (odiousFile == NULL) { printf("open error: %d/%s\n", errno, strerror(errno)); exit(99); } /*************************************/ /* Open file to write errors */ /*************************************/ errorFile = fopen("DD:ERRORS", "w"); if (errorFile == NULL) { printf("open error: %d/%s\n", errno, strerror(errno)); exit(99); } /*************************************/ /* Open file to read input */ /*************************************/ inputFile = fopen("DD:INPUT", "r"); if (inputFile == NULL) { printf("open error: %d/%s\n", errno, strerror(errno)); exit(98); } /*************************************/ /* Run program */ /*************************************/ while (fscanf(inputFile,"%d",&i) != EOF) { if (isOdious(i)==1) { bytesWritten = sprintf(buffer,"%d is odious\n",i); fwrite(buffer, 1, bytesWritten, odiousFile); } } /*************************************/ /* Close output files */ /*************************************/ fclose(odiousFile); fclose(errorFile); /*************************************/ /* Close input file */ /*************************************/ fclose(inputFile); return 0; } int isOdious (int myInt) { int NumberOfOnes; NumberOfOnes=0; if (myInt==0) { bytesWritten = sprintf(buffer,"0 not supported!\n"); fwrite(buffer, 1, bytesWritten, errorFile); return 100; } if (myInt>1024) { bytesWritten = sprintf(buffer,"%d too large!\n",myInt); fwrite(buffer, 1, bytesWritten, errorFile); return 101; } while (myInt>0) { if (myInt%2==1) { NumberOfOnes=NumberOfOnes+1; myInt=myInt-1; } myInt=myInt/2; } if (NumberOfOnes%2==1) return 1; else return 0; } ------------------------------------------ ODIOUS: ------- É o arquivo que contem os numeros de: 1,2,3,....498,499,500,1027. Este programa da forma em que esta, gera, dois arquivos; o ODIOUS e o OERROR. Este programa diz se o numero tem paridade par. O que eu devo fazer ou alterar, para gerar o outro arquivo de paridade impar. Celso. -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br