Jump to content
Ecaterina

Sfaturi rezolvare problema C 2 fisiere, 4 si 8 cifre

Recommended Posts

Ecaterina    0

Buna! Am urmatoarea problema: In fisierul nr1.txt este memorata pe prima linie o valoare naturala n de cel mult 8 cifre, iar pe linia urmatoare sunt memorate n numere naturale, cu maximum 4 cifre fiecare, ordonate strict crescator si separate prin cate un spatiu. In fisierul nr2.txt este memorata pe prima linie o valoare naturala m de cel mult 8 cifre, iar pe linia urmatoare sunt memorate m numere naturale, cu maximul 4 cifre fiecare, ordonate strict crescator si separate prin cate un spatiu. Se cere afisarea pe ecran, separate prin cate un spatiu, in ordine strict crescatoare, a tuturor numerelor aflate pe a doua linie in cel putin unul dintre cele doua fisiere. In cazul in care un numar apare in ambele fisiere, el va fi afisat o singura data. Alegeti un algoritm de rezolvare eficient din punct de vedere al memoriei utilizate si al timpului de executare.
Exemplu: pentru urmatoarele fisiere:
nr 1.txt
5
3 6 8 9 12
se va afisa 2 3 5 6 7 8 9 12 13

nr2.txt
6
2 3 5 7 9 13

a) Descrieti succint in limbaj natural strategia de rezolvare si justificati eficienta algoritmului
b) Scrieti programul C/C++ corespunzator algoritmului ales.

Eu am facut codul:

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    int n,m,ant=-1,x,y;
    ifstream f("V19_S3_4_1.txt");
    ifstream g("v19_s3_4_2.txt");
    f>>n;
    g>>m;
    while(f>>x || g>>)
        cout<<x<<"  "<<y<<" ";
    {
        if(ant==-1)
            if(x>y)
                ant=y;
            else
                ant=x;
        if(x<y &&x!=ant)
        ant=x;
        else
            if(y<x && y!=ant)
            ant=y;
        cout<<ant<<"  ";
    }
    return 0;
}

dar nu merge. Ce e gresit?
Multumesc!

Share this post


Link to post
Share on other sites

Courage    1,495
while(f>>x || g>>y)
  cout<<x<<"  "<<y<<" ";

Aici citeşti concomitent din ambele fişiere, până când unul se goleşte, apoi rămâne să citeşti din celălalt. Ce ai pus după nu mai intră în while.

Nu prea înţeleg ce vrei să faci acolo, dar problema se rezumă la algoritmul de interclasare.

Share this post


Link to post
Share on other sites
Gabriel R.    104

O varianta de rezolvare:

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    int x,y,i=1,j=1,n,m,ant=100000;
    ifstream f("nr1V19.txt");
    ifstream g("nr2V19.txt");
    f>>n;
    g>>m;
    f>>x;
    g>>y;
    while(i<=n && j<=m)
    {
        if(x<y &&x!=ant)
        {
            cout<<x<<"  ";
            ant=x;
            i++;
            f>>x;
        }
        if(y<<x && y!=ant)
        {
            cout<<y<<"  ";
            ant=y;
            j++;
            g>>y;
        }
        if(y==x && x!=ant)
        {
            cout<<x<<"   ";
            ant=x;
            j++;
            i++;
            f>>x;
            g>>y;
        }
    }
    return 0;
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×