Olhasó amigo... também estou participando do concurso mainframes 2011 da IBM.
Procurando ajuda pela 'net' né?

Seguinte bro, primeiramente precisamos declarar a variavel evilFile e criação do
output OEVIl logo apos a criação do ODIOUS

#include <string.h>
        FILE *odiousFile
        FILE *evilfile  /*variavel a ser inserida */




        /*************************************/
        /*     Open file to write output     */
        /*************************************/
        odiousFile = fopen("DD:ODIOUS", "w");
        if (odiousFile == NULL)
        {
                printf("open error:   %d/%s\n", errno, strerror(errno));
                exit(99);
        }

/* codigo a ser inserido */
         evilFile = fopen("DD:OEVIL", "w");
        if (evilFile == NULL)
        {
                printf("open error:   %d/%s\n", errno, strerror(errno));
                exit(99);
        }



Analisando o final do código, observei como ele obtém um número odioso:
int isOdious (int myInt)
{


/* Aqui ele gera o output pro arquivo error, pois se o número é igual a zero.*/
  int NumberOfOnes;
  NumberOfOnes=0;
  if (myInt==0) {
                         bytesWritten = sprintf(buffer,"0 not supported!\n");
                         fwrite(buffer, 1, bytesWritten, errorFile);
    return 100;
  }



/* outro output pro arquivo error, caso for for maior que 1024 /*
  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;
  }
 


/* Aqui ele divide a quantidade de 1`s por 2. Se restar 1, ele possui número */
/*impar de números 1  */

 if (NumberOfOnes%2==1)
           return 1;
  else
    return 0;
}




Então pensei o seguinte: "Puxa, na listagem, se o número não é Odious, então ele
é Evil"

Fiz as devidas inserções:

         /*************************************/
         /*     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);
    }

/* codigo a inserir                        /*
    if (isOdious(i)==0) {
                           bytesWritten = sprintf(buffer,"%d is evil\n",i);
                           fwrite(buffer, 1, bytesWritten, evilFile);
    }

  }



Salve e de um submit naqueles dois Arquivos que a apostila pediu. Se retornar
nenhum erro, entro de PARTE2.DATA será criado o arquivo OEVIL.
Entao compare com o arquivo ODIOUS.
Os números contidos em uma listagem não estarão contidos na outra.
Verifique o arquivo de erros, se continua somente com as duas linahs originais.

Espero ter ajudado se ficou confuso o post, mais tarde te envio o número das
linhas a inserir o codigo. Entendo muito pouco de C, somente li algum tempo
atrás qndo me preparava para um concurso. Caso alguém que domine totalmente a
linguagem puder auxiliar, a discussão será mais rica.




Celso, estou com dificuldades em inserir o cabeçalho nos arquivos. Não conheço
bem a função fwrite. Voce consegue fazer isso?







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

Responder a