• 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

Object Storage Arubacloud
0 głosów
823 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 Maniak (56,980 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 (42,000 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ź 456 wizyt
pytanie zadane 16 marca 2021 w Python przez darssska Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 190 wizyt
pytanie zadane 22 listopada 2020 w C i C++ przez BedrisK Użytkownik (600 p.)
0 głosów
1 odpowiedź 3,807 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez mietek_arduino Początkujący (330 p.)

92,549 zapytań

141,392 odpowiedzi

319,518 komentarzy

61,933 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...