Informatică, întrebare adresată de alinetare2005, 8 ani în urmă

odonarea crescatoare doar a elementelor negative dintr-un vector, cele pozitive ramanand pe aceleasi pozitii.

cu explicatie​

Răspunsuri la întrebare

Răspuns de Inspiratul
4

Răspuns:

#include <iostream>

using namespace std;

int a[100],n,i,j,aux;

int main()

{

   cin>>n;

   for(i=1;i<=n;i++)

    cin>>a[i];

   /// Citirea numarului de componente si elementele vectorului

   for(i=1;i<=n-1;i++)

    for(j=i+1;j<=n;j++)

  /// Prin cele doua for-uri vei putea sa realizeazi o pereche de doua elemente, umul de pe pozitia i si unul de pe pozitia j, dar pana la fianl, se vor compara toate elementele de pe fiecare pozitie

     if(a[i]<0 && a[j]<0)  /// Conditia ca ambele componente ale vectorului sa fie negative

      if(a[i]>a[j]) /// Daca afirmatia este valida, iar in cazul in care componenta de pe pozitia i este mai mica decat cea de pe j, atunci se realizeaza interscimbarea celor doua valori

   {

       aux=a[i];

       a[i]=a[j];

       a[j]=aux;

   }

   for(i=1;i<=n;i++)

    cout<<a[i]<<" ";

   /// Afisarea vectorului

   return 0;

}

Explicație:

La fel, comentariile sunt doar pentru explicatii, nu trebuie sa le scrii =))


alinetare2005: si pun vreo 30-50 de puncte
Inspiratul: Ok,bine asa! =))
alinetare2005: si mna, la fel, faci ce sti de acolo, dar sa imi si explici
alinetare2005: vezi ca am postat
alinetare2005: da sa imi explici frate, cum ai luat prima, si ultima valoare, de unde
Inspiratul: Acum ma uit
Inspiratul: Poti sa dai link-ul de la ea, ca vad ca pe feed nu apare
Inspiratul: Desi am dat refresh de cateva ori
alinetare2005: vezi acum
Inspiratul: Gata, a aparut
Răspuns de andrei750238
2

► Explicatie:

Folosim algoritmul de sortare prin selectie cu o modificare minora:

Daca i este pozitiv sau 0 sarim peste acest i folosind instructiunea continue; Aceasta intrerupe rulearea curenta a buclei repetitive si o continua de la urmatoarea iteratie (se trece simplu la urmatorul i daca exista).

Acelasi lucru in facem si pentru j.

In loc de swap(vec[i], vec[j]) poti face interschimbarea de mana, ca la prima lectie de info:

{

int aux = vec[i];

vec[i] = vec[j];

vec[j] = aux;

}

► Cod C++:

#include <iostream>

#include <algorithm>

using namespace std;

int main() {

int vec[100];

int nr_elemente;

cout << "Numar elemente : ";

cin >> nr_elemente;

cout << "Introduceti vectorul : ";

for (int i = 0; i < nr_elemente; i++) {

 cin >> vec[i];

}

for (int i = 0; i < nr_elemente - 1; i++) {

 //Sarim peste i pozitiv

 if (vec[i] >= 0) continue;

 for (int j = i + 1; j < nr_elemente; j++) {

  //Sarim peste j pozitiv

  if (vec[j] >= 0) continue;

  //Stim sigur ca elementele vec[i] si vec[j] sunt negative, le interschimbam daca nu sunt in ordinea buna

  if (vec[i] > vec[j]) swap(vec[i], vec[j]);

 }

}

cout << "Vector sortat : ";

for (int i = 0; i < nr_elemente; i++) cout << vec[i] << " ";

}

Anexe:
Alte întrebări interesante