Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pedrohpcm

Divisores de um número

Recommended Posts

Alguém poderia me ajudar com essa questão?

 

 

Escreva um programa que escreva em um arquivo os divisores de um número inteiro passado como parâmetro do programa. O programa deve receber dois parâmetros, o número inteiro e o nome do arquivo a ser gravado. Um exemplo de chamada de programa é:

./divisores 213 divisores213.txt

 

Para implementar este programa uso os códigos fornecidos a seguir:

 

main.c

 

#include <stdio.h>
#include "divisores.h"
 
void usage(){
 
printf("\n\n Uso do programa gera_divisores:\n\n");
printf(" ./gera_divisores NUM ARQ\n\n");
printf(" onde NUM é um inteiro com o número cujo divisores se deseja gerar\n");
printf(" e ARQ é o nome do arquivo a ser criado com os divisores de NUM.");
printf("TODOS os parâmetros são obrigatórios");
}
 
int check_parameters(int argc, char **argv){
 
/* FALTA IMPLEMENTAR */
return 0;
}
 
unsigned long int converte(char *num){
 
unsigned long int n;
/* FALTA IMPLEMENTAR */
return n;
}
 
int main(int argc, char * argv[ ]) {
 
FILE * arq_divisores;
if (!check_parameters(argc, argv)){
usage();
return 1;
}
 
arq_divisores = fopen(argv[2],"w");
 
if (arq_divisores== NULL){
printf("ERROR: Não foi possível abrir o arquivo %s.\n",argv[2]);
return 2;
}
 
if (gera_divisores(converte(argv[1]),arq_divisores) != 0){
printf("ERROR: Problemas ao escrever dados no arquivo %s.\n", argv[2]);
return 3;
}
 
fclose(arq_divisores);
return 0;
}

 

divisores.h

 

#ifndef Divisores_divisores_h
#define Divisores_divisores_h
 
int gera_divisores(unsigned long int num, FILE * arquivo);
 
#endif

divisores.c

 

#include <stdio.h>
#include "divisores.h"
 
int gera_divisores(unsigned long int num, FILE * arquivo){
 
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

É necessário realmente implementar verificação dos argumentos? Se você estiver usando algum sistema que suporte o padrão POSIX e seu programa for executado somente nesse ambiente pode usar optarg (unistd.h) para facilitar a coisa.

 

Ao invés de ficar criando mensagens você mesmo, use error.h.

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main(int argc, char * argv[ ]) {
 
  // TRATAMENTO DOS ARGUMENTOS

  FILE * arq_divisores = fopen(argv[2],"w");
  if (!arq_divisores || ferror(arq_divisores)) {
    printf("[ERRO @ %d]: %s\n", __LINE__-2, strerror(errno));
    exit(errno);
  }

  // RESTANTE DAS CHAMADAS. 

  fclose(arq_divisores);
  return 0;
}

Qual é o problema com a questão?
(Leia as regras que estão nos tópicos fixos desse fórum. Pessoas pedindo código pronto tem seus tópicos excluídos.)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.