• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyznaczanie NWD z liczb zapisanych w pliku txt

0 głosów
343 wizyt
pytanie zadane 22 marca 2020 w C i C++ przez Szymon12345 Nowicjusz (120 p.)

Są dostępne programy, które wyznaczają NWD z n liczb, ale nie mam pojęcia jak określić ile jest liczb w tych plikach. A tak nie dodałem, że NWD muszę wyznaczyć z trzech plików a całe polecenie brzmi tak: 

W folderze dane, w plikach dane1.txt, dane2.txt, dane3.txt, znajdują się ciągi liczb naturalnych, po jednej liczbie w każdym wierszu:

dane1.txt zawiera 500 liczb mniejszych niż 6 000

dane2.txt zawiera 1 000 liczb mniejszych niż 60 000

dane3.txt zawiera 75 000 liczb mniejszych niż 600 000

Otrzymane wyniki dla każdego polecenia zapisz w plikach zadanie1_punkt_a.txt, zadanie1_punkt_b.txt

a) Dla każdego z plików: dane1.txt, dane2.txt, dane3.txt wyznacz największy wspólny dzielnik wszystkich liczb znajdujących się w tym pliku.

w tej chwili mój program wygląda tak:

#include<iostream>
using namespace std;
void wypelnij (int*a, unsigned n)
{
    int i;
    fin>>i;
    for(i=0; i<n; i++)
        cin>>a[i];
}
int nwd (int *a, unsigned n)
{
    int w=0, r;
    int i;
for(i=0; i<n; i++)
    {
        while (a[i]!=0)
        {
            r=w%a[i];
            w=a[i];
            a[i]=r;
        }
        w=a[i];
    }
    return w;
}
int main ()
{
    ifstream fin("dane_1.txt");
    ofstream fout("wyniki_1.txt");
    unsigned n;
    cout<<"Podaj z ilu liczb policzyc NWD ";
    cin>>n;
    int *a;
    a=new int [n];
    wypelnij (a,n);
    cout<<"wartosc NWD to "<<nwd(a,n)<<endl;
    delete [] a;
}

lecz niestety nic tu nie działa, jestem jeszcze słaby w to wszystko, więc proszę o pomoc.

1 odpowiedź

0 głosów
odpowiedź 22 marca 2020 przez Whistleroosh Nałogowiec (29,580 p.)
edycja 22 marca 2020 przez Whistleroosh

Na szybko wprowadziłem takie zmiany:

#include<iostream>
#include<fstream>

using namespace std;

int nwd (int *a, unsigned n)
{
    int w=a[0], r;

    for(int i=1; i<n; i++)
    {
        while (a[i]!=0)
        {
            r=w%a[i];
            w=a[i];
            a[i]=r;
        }
    }
    return w;
}
 
int main ()
{
    ifstream fin("dane_1.txt");
    ofstream fout("wyniki_1.txt");
    unsigned n;

    cout<<"Podaj z ilu liczb policzyc NWD ";
    cin>>n;

    int *a;
    a=new int [n];

    for(int i=0; i<n; i++)
        fin>>a[i];

    fout << "wartosc NWD to "<< nwd(a,n) << endl;
    delete [] a;
    fin.close();
    fout.close();
}

Poprawiłem to co napisałeś w funkcji wypełnij, a także nwd, bo tam też miałeś mały błąd.

komentarz 22 marca 2020 przez tkz Nałogowiec (40,760 p.)

39. i 40. linia jest zbędna, dtor fstream'a zrobi to za Ciebie. Warto też dodać, że standard oferuje NWD(https://en.cppreference.com/w/cpp/numeric/gcd). Dodatkowo warto zmienić typy w pętlach, ponieważ porównujesz typ znakowy, z bez znakowym.

komentarz 22 marca 2020 przez Szymon12345 Nowicjusz (120 p.)

@Whistleroosh, dzięki

komentarz 22 marca 2020 przez Szymon12345 Nowicjusz (120 p.)
pomyślę jeszcze nad tym ale dzięki

Podobne pytania

0 głosów
1 odpowiedź 66 wizyt
pytanie zadane 16 marca w Python przez darssska Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 79 wizyt
pytanie zadane 22 listopada 2020 w C i C++ przez BedrisK Użytkownik (600 p.)
0 głosów
1 odpowiedź 2,186 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez mietek_arduino Początkujący (330 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

85,082 zapytań

133,883 odpowiedzi

296,819 komentarzy

56,216 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...