• 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

VPS Starter Arubacloud
0 głosów
811 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,900 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ź 435 wizyt
pytanie zadane 16 marca 2021 w Python przez darssska Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 189 wizyt
pytanie zadane 22 listopada 2020 w C i C++ przez BedrisK Użytkownik (600 p.)
0 głosów
1 odpowiedź 3,780 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez mietek_arduino Początkujący (330 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...