Jump to content

Ajutor rezolvare tema c++ (numere.txt si BAC.IN)


-PTM-Andrey

Recommended Posts

Salut. Am 2 probleme pe care nu stiu cum sa le rezolv, si una pe care am rezolvat-o dar imi afiseaza un rezultat partial din rezolvare.

~~~~~~~~~~~~Probleme pe care nu le stiu. ~~~~~~~~~~~~~~~~~~

1.

Fişierul text numere.txt conţine pe prima sa linie un număr natural n (n<30000), iar pe a doua sa linie, n numere întregi, având maximum 4 cifre fiecare. Se cere să se afişeze pe ecran un şir de n numere întregi, cu proprietatea că valoarea termenului de pe poziţia i (i=1,2,…,n) din acest şir este egală cu cea mai mare dintre primele i valori de pe a doua linie a fişierului numere.txt.
a) Descrieţi pe scurt un algoritm de rezolvare, eficient din punct de vedere al timpului de executare şi al spaţiului de memorie utilizat, explicând în ce constă eficienţa sa. 
b) Scrieţi programul C/C++ corespunzător algoritmului descris. 
Exemplu: dacă fişierul numere.txt are conţinutul
12
4 6 3 7 8 1 6 2 7 9 10 8

se afişează pe ecran numerele

4 6 6 7 8 8 8 8 8 9 10 10

2.

Pe prima linie a fişierului text BAC.IN se găsesc, separate prin câte un spaţiu, mai multe
numere naturale de cel mult 9 cifre fiecare. Scrieţi un program C/C++ care citeşte numerele
din acest fişier, elimină toate cifrele impare din fiecare dintre aceste numere şi apoi scrie în
fişierul text BAC.OUT numerele astfel obţinute, separate prin câte un spaţiu. Dacă un număr
din fişierul BAC.IN nu conţine nicio cifră pară nenulă, acesta nu va mai apărea deloc în
fişierul de ieşire. (10p.)
Exemplu: dacă fişierul BAC.IN conţine numerele 25 7 38 1030 45127 0 35 60 15,
atunci BAC.OUT va avea conţinutul: 2 8 42 60.

 

~~~~~~~~~~~~Problema cu rezultat partial~~~~~~~~~~~~~~~~~~

3.

Fişierele text NR1.TXT şi NR2.TXT conţin, separate prin câte un spaţiu, mai multe numere
întregi de cel mult 9 cifre fiecare. Fiecare dintre fişiere conţine cel mult 100 de valori şi
numerele din fiecare fişier sunt ordonate strict crescător. Se cere să se afişeze pe ecran, în
ordine crescătoare, numerele divizibile cu 5 care se găsesc doar în unul din cele două
fişiere.
Exemplu: dacă fişierul NR1.TXT conţine numerele 1 2 3 4 7 20 60, iar fişierul
NR2.TXT conţine numerele 3 5 7 8 9 10 12 20 24, atunci se vor afişa pe ecran
valorile 5 10 60.
a) Descrieţi un algoritm de rezolvare a acestei probleme, eficient din punct de vedere al
timpului de executare şi al spaţiului de memorie utilizat, explicând în ce constă eficienţa
acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris.

Si acesta este algoritmul facut de mine:

#include <iostream>
#include <fstream>

using namespace std;
ifstream f("NR1.TXT");
ifstream g("NR2.TXT");

int main()
{
    int x,y;
    cout<<"b)"<<endl;
    while(f>>x && g>>y)
    {
        if(x==y)
            f>>x;
            g>>y;
        while(x<y)
        {
            if(x%5==0)
                    cout<<x<<" ";
            f>>x;
        }
        while(x>y)
        {
            if(y%5==0)
                cout<<y<<" ";
            g>>y;
        }
    }
}

Imi afiseaza doar 5 10 .. fara a-l mai afisa pe 60, de ce? ce nu este corect?

 

Link to comment
Share on other sites

#include <iostream>
#include <fstream>

using namespace std;
ifstream f("NR1.TXT");
ifstream g("NR2.TXT");

int main()
{
    int x,y;
    cout<<"b)"<<endl;
    while(f>>x && g>>y)
    {
        if(x==y)
            f>>x;
            g>>y;
        while(x<y)
        {
            if(x%5==0)
                    cout<<x<<" ";
            f>>x;
        }
        while(x>y)
        {
            if(y%5==0)
                cout<<y<<" ";
            g>>y;
        }
    }
    while(f>>x)
        if(x%5==0)
            cout<<x<<"  ";
    while(g>>y)
        if(y%5==0)
            cout<<y<<"  ";
return 0;
}

Asa am facut, si tot nu afiseaza 60...

Link to comment
Share on other sites

Am pus si acele acolade, tot nu merge.. Deci nu inteleg care este greseala..

 

Eu, cand am facut algoritmul asa m-am gandit: Algoritmul citeste cate un numar din fiecare fisier, prin cate o variabila simpla x si y. In cazul in care valorile coincid, se citesc alte valori. La fiecare pas, se testeaza divizibilitatea cu 5 pentru numarul mai mic. Cand un sir se termina, algoritmul continua pentru numerele din al doilea sir. 
 

Edited by -PTM-Andrey
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.