Ir ao conteúdo
  • Cadastre-se
fernandel9

Problema. mdc de dois ou mais números

Recommended Posts

Olá pessoal do fórum. Estou com dificuldades com uma atividade prática da minha faculdade. O professor quer um programa que calcule o mdc de dois ou mais números, e também liste todos os divisores comuns entre esses números. Já consegui fazer um algoritmo que calcule de dois numeros apenas. Mas com mais de dois numeros está difícil. 

 

Segue a proposta: 
 

Em qualquer linguagem de programação, implementar um algoritmo que, dadas duas ou mais entradas pelo usuário, apresente o MDC entre estes valores e o conjunto de todos os divisores dos valores inseridos como entrada, e salve esse resultado em arquivo .txt (o MDC em uma linha e o conjunto de divisores na linha seguinte). 

Uma vez criado, o arquivo de saída sempre deverá ser incrementado, nunca substituído. 

Segue o meu código que até o momento só salva os números do usuário em um vetor:
 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("\t\t\tMDC de dois ou mais numeros\n\n"); /*Titulo */

    int y = 0, resto, divisor, dividendo, x; /*Inicializacao de var's*/

    printf("Com quantos numeros deseja trabalhar?  ");
    scanf("%d", &x); /*Guardando quantidade de numeros que o usuario deseja*/
    int numeros[x+1];
    if(x < 2) /*Um if para verificar erro se for menos que dois numeros*/
    {
        printf("\né dois ou mais numero filhao. Tente novamente!\n");
    }else
    {
        /*A seguir um for para perguntar ao usuario os numeros e salvar no vetor*/
        for(int z = 0, cont = 1, y = x; cont!=y+1 ;cont++, z++)
        {
            printf("\nDigite o n%d: ", cont);
            scanf("%d", &numeros[z]);
        }
    }
    return 0;
}

Qualquer ajuda é bem-vinda. Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para salvar em um arquivo, utilize a seguinte logica:

1-você precisa saber se o arquivo existe ou não, senão criar ele.

2-Apos criar ele para salvar os dados, você vai ter que fecha-lo e abri-lo no modo "a" que vai dar a possibilidade de sempre 'incrementar' um arquivo, sem apagar os dados anteriores.

 

Exemplo de criação e salvamento de arquivo, lembrando que se você fechar o programa enquanto o arquivo não for fechado, os dados são perdidos:

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


bool criar_arquivo(const char *);
bool incrementar_arquivo(FILE *,const char *);

///@brief Funcao principal
int main(void)
{
    FILE *fp = NULL;
    char tmp[128];
    tmp[0]='\0';

    //criar arquivo
    while(1){
        system("cls");
        printf("\nDigite o nome do arquivo:");
        gets(tmp);
        if(!criar_arquivo(tmp)){
            printf("Digite um nome de arquivo inexistente!\n");
            getchar();
        }else break;
    }

    //implementar arquivo
    fp = fopen(tmp,"a");
    while(1){
        system("cls");
        printf("\nDigite um texto ou SALVAR p/ salvar o arquivo:");
        gets(tmp);

        if(strcmp(tmp,"SALVAR") == 0)break;
        if(!incrementar_arquivo(fp,tmp)){
            printf("Falha ao adicionar texto ao arquivo: %s!\n",fp->_tmpfname);
            getchar();
            break;
        }
    }
    fclose(fp);
    return 0;
}

///@brief Funcao para incrementar uma linha a um arquivo aberto
bool incrementar_arquivo(FILE *file,const char *text){
    if(file == NULL){
        return false;
    }
    fprintf(file,"%s\n",text);
    return true;
}

///@brief Funcao para criar arquivo se nao existir
bool criar_arquivo(const char *arquivo){
    FILE *fp = NULL;
    fp = fopen(arquivo,"w");
    if(!fp){
        return false;
    }
    fclose(fp);
    return true;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×