Informatică, întrebare adresată de maarrryyyy, 9 ani în urmă

va roggg Scrieţi un program C++ care citeşte numerele din fişierul date.in şi afiseaza valorile distincte citite, separate prin câte un spaţiu, respectându-se regula: pe prima linie vor fi scrise numerele impare în ordine crescătoare, iar pe linia a doua numerele pare, în ordine descrescătoare.
Exemplu:
dacă pe prima linie a fişierului date.in se află numerele: 75 12 3 3 18 75 1 3
atunci se va afisa:
1 3 75
18 12
am incercat ,dar nu afiseza nimic (+ nu am stiut cum sa afisez numere distincte)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("date.in");
int main()
{int x,i=0,j=0,n=0,m=0,a[100],b[100],aux;
while(in>>x)
if(x%2!=0)
{i++;
n++;
a[i]=x;}
else 
   {j++;
    m++;
    b[j]=x;}
for(i=0;i<n-1;i++) 
   for(j=i+1;j<n;j++) 
      if(a[i]<a[j])   
 {aux=a[i];   
 a[i]=a[j];   
a[j]=aux;} 
  for(i=0;i<n;i++) 
  cout <<a[i]<<" "; 
for(i=0;i<m-1;i++) 
  for(j=i+1;j<m;j++)   
    if(a[i]<a[j])   
{aux=a[i];   
 a[i]=a[j];   
 a[j]=aux;} 
 for(i=0;i<m;i++) 
  cout <<b[i]<<" "; 
  return 0;}


Utilizator anonim: Nu vad unde ai pus acoladele la "while"
maarrryyyy: cred ca acoladele la "while" nu conteaza fiindca el continua cu if... else...
spanmaria75: pt numere distincte faci verificare cu vector de frecventa
maarrryyyy: problema e ca nici macar nedistincte nu afiseaza
spanmaria75: #include <iostream>
#include <fstream>
using namespace std;
ifstream in("date.in");
int main()
{int x,i=0,j=0,n=0,m=0,a[100],b[100],aux;
while(in>>x)
if(x%2!=0)
{
a[i]=x;
i++;
n++;
}
else
{ b[j]=x;
j++;
m++;
}
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)
if(b[i]<b[j])
{aux=b[i];
b[i]=b[j];
b[j]=aux;}
for(i=0;i<m;i++)
cout <<b[i]<<" ";
cout<<endl;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j])
{aux=a[i];
a[i]=a[j];
a[j]=aux;}
for(i=0;i<n;i++)
cout <<a[i]<<" ";
return 0;}
spanmaria75: ti am corectat greselile, acum trebuie sa i faci un vector de frecventa si sa inversezi afisarea ca nu le am mai rotit
maarrryyyy: multumesc frumos

Răspunsuri la întrebare

Răspuns de stassahul
2
Pai nai ce face la numerele distincte, dupa ce sortezi vectorul, numerele care se repeta vor fi ordonate si pur si simplu controlezi daca nu scrii un numar ca anteriorul :). De ex: ai vectorul: 1 5 4 3 6 5 2 5, dupa sortare: 1 2 3 4 5 5 5 6, inainte de a afisa un numar, controlezi daca vector[i] nu e egal cu vector[i-1] si astai e totul :). Dar asa, legat de cod, e cam urit scris. Macar puneai swap in cel mai rau caz, sau sort in cel mai bun. Iata un cod correct:

#include <bits/stdc++.h>

using namespace std;

ifstream fin("date.in");

int a[100],b[100],n1,n2,x;

int main()
{

    while(fin >> x)
        if(x%2==0) a[n1++]=x;
            else b[n2++]=x;

    sort(a,a+n1,greater<int>());
    sort(b,b+n2);

    for(int i=0;i<n2;i++)
        if(i==0) cout << b[i] << " ";
            else if(b[i]!=b[i-1])
                cout << b[i] << " ";

    cout << endl;

    for(int j=0;j<n1;j++)
        if(j==0) cout << a[j] << " ";
            else if(a[j]!=a[j-1])
                cout << a[j] << " ";

    return 0;

}

spanmaria75: nu cred ca stie functii... degeaba ii dai un cod mai chestii mai avansate
spanmaria75: no hate, just trying to help
maarrryyyy: inca nu am invatat functiile (sort,greater) dar totusi multumesc frumos de explicatie :-)
Alte întrebări interesante