Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Marci Biciclete - recomandari

Lipsa Tensiune pe o Faza, bransam...

Recomandare bicicleta copil 5 ani.

Recomandare kit automat acces usa
 [email][nvidia] Your GeForce NOW ...

Site nesigur

Baghetele ornamentale intre foile...

O recomandare pentru o camera ful...
 Pareri magazin online quickmobile?

Unde gasesc banane albastre?

Despre compania de aministrare Sq...

Durere taietura deget dupa 2 luni
 Dalți gravare lemn

Didgeridoo

Motorola Edge 50 Ultra

Gaura perete apartament cu evitar...
 

[Tema] Ordonare vector: impar crescator, par descrescator

- - - - -
  • Please log in to reply
8 replies to this topic

#1
1marius1

1marius1

    Member

  • Grup: Members
  • Posts: 587
  • Înscris: 29.03.2012
Salut!
Am urmatoarea problema:
[ https://i.imgur.com/OgtqRVv.jpg - Pentru incarcare in pagina (embed) Click aici ]

M-am gandit sa o rezolv in felul urmator:
-pun toate numerele pare intr-un alt vector(par[100])
-pun toate numerele impare intr-un alt vector(impar[100])
-apoi sortez vectorii: cel par descrescator, iar cel impar crescator
-apoi interclasez vectorii: incep cu prima valoare de la impar si apoi prima de la par, apoi a doua de la impar... s.a.m.d.

Mi se pare ca trebuie sa fac prea multe operatii si e si de scris mult. Imi puteti da vreo ideie cum as putea sa fac subprogramul mai simplu si mai eficient?
Multumesc anticipat.

Edited by 1marius1, 06 May 2016 - 15:11.


#2
poadol

poadol

    Guru Member

  • Grup: Senior Members
  • Posts: 14,104
  • Înscris: 13.12.2010
Crezi ca ai nevoie de acei vectori, vector(par[100] si vector(impar[100]? De la acest lucru = 2 inmultit cu n este totdeauna un numar par - pleaca tot.

Edited by poadol, 06 May 2016 - 15:28.


#3
sftpdt

sftpdt

    Senior Member

  • Grup: Senior Members
  • Posts: 3,663
  • Înscris: 29.08.2013
Ia două variabile auxiliare, par = 2 * n şi impar = 1;
pentru i ← 0, n-1, 2
    v[i] ← impar; v[i + 1] ← par;
    par ← par - 2; impar ← impar + 2;

#4
1marius1

1marius1

    Member

  • Grup: Members
  • Posts: 587
  • Înscris: 29.03.2012

 sftpdt, on 06 mai 2016 - 15:26, said:

Ia două variabile auxiliare, par = 2 * n şi impar = 1;
pentru i ← 0, n-1, 2
v[i] ← impar; v[i + 1] ← par;
par ← par - 2; impar ← impar + 2;

Da se pare ca era foarte simplu... dar eu nu am fost atent la cerinta...
Scrie ca se construieste in memorie vectorul... Eu credeam ca am deja am vectorul si trebuie sa-l sortez in felul acela.

void valuri(unsigned n, int v[])
{
 int par=2*n,impar=1;
 for(int i=0;i<2*n-1;i+=2)
 {
  v[i]=impar;
  v[i+1]=par;
  impar+=2;
  par-=2;
 }
}


In cerinta spune ca: 2<=n<=50 si ca vectorul are 2*n elemente.
Ar trebui sa pun numarul maxim de elemente in subprogram sau "sa il las sa isi ia" el dimensiunea?
Adica v[100] ?

Edited by 1marius1, 06 May 2016 - 18:47.


#5
sftpdt

sftpdt

    Senior Member

  • Grup: Senior Members
  • Posts: 3,663
  • Înscris: 29.08.2013

 1marius1, on 06 mai 2016 - 18:34, said:

Ar trebui sa pun numarul maxim de elemente in subprogram sau "sa il las sa isi ia" el dimensiunea?

În parametrul funcţiei?

#6
1marius1

1marius1

    Member

  • Grup: Members
  • Posts: 587
  • Înscris: 29.03.2012

 sftpdt, on 06 mai 2016 - 20:19, said:


În parametrul funcţiei?
Da

#7
sftpdt

sftpdt

    Senior Member

  • Grup: Senior Members
  • Posts: 3,663
  • Înscris: 29.08.2013
Nu e necesar.

#8
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,419
  • Înscris: 10.08.2005

 1marius1, on 06 mai 2016 - 18:34, said:

void valuri(unsigned n, int v[])
{
int par=2*n,impar=1;
for(int i=0;i<2*n-1;i+=2)
{
v[i]=impar;
v[i+1]=par;
impar+=2;
par-=2;
}
}

n=4
1, 8 , 3, 6, 5, 4, 7, 2
(1) 1 + 8 = 9
(2) 3 + 6 = 9
(3) 5 + 4 = 9
(4) 7 + 2 = 9
(1) sir[0] + sir[1] = 2*n+1
(2) sir[2] + sir[3] = 2*n+1
(3) sir[4] + sir[5] = 2*n+1
(4) sir[6] + sir[7] = 2*n+1
sum = 2*n+1
(x) sir[x] + sir[x+1] = sum;
sir[x] = x + 1
sir[x+1] = sum - sir[x]
sir[x+1] = sum - (x+1)
for( i=0; i<sum; i++)
{
sir[i++] = i; // impar
sir[i] = sum-i; // par
}

Edited by MarianG, 07 May 2016 - 11:22.


#9
1marius1

1marius1

    Member

  • Grup: Members
  • Posts: 587
  • Înscris: 29.03.2012

 MarianG, on 07 mai 2016 - 11:20, said:

n=4
1, 8 , 3, 6, 5, 4, 7, 2
(1) 1 + 8 = 9
(2) 3 + 6 = 9
(3) 5 + 4 = 9
(4) 7 + 2 = 9
(1) sir[0] + sir[1] = 2*n+1
(2) sir[2] + sir[3] = 2*n+1
(3) sir[4] + sir[5] = 2*n+1
(4) sir[6] + sir[7] = 2*n+1
sum = 2*n+1
(x) sir[x] + sir[x+1] = sum;
sir[x] = x + 1
sir[x+1] = sum - sir[x]
sir[x+1] = sum - (x+1)
for( i=0; i<sum; i++)
{
sir[i++] = i; // impar
sir[i] = sum-i; // par
}

Complexitatea nu este aceeasi la cele doua variante?
Varianta ta pare mai simpla.

Edited by 1marius1, 07 May 2016 - 13:13.


Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate