Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Incalzire in pardoseala etapizata

Suprataxa card energie?!

Cum era nivelul de trai cam din a...

probleme cu ochelarii
 Impozite pe proprietati de anul v...

teava rezistenta panou apa calda

Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...
 Rezultat RMN

Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor
 Discuții despre TVR Sport HD.

Cost abonament clinica privata

Tremura toata, dar nu de la ro...

Renault Android
 

[TEMA] elementele negative de pe pozițiile pare cu divide et impera

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

#1
masternick

masternick

    New Member

  • Grup: Members
  • Posts: 4
  • Înscris: 31.08.2013
Salut tuturor !

Problema: Folosind metoda „Divide et impera” să se scrie programul care afișează toate elementele negative de
pe pozițiile pare ale unui vector de numere întregi.
Am scris mai jos codul.
Imi afiseaza doar primul numar pe care il intilneste,si asta e normal.
Cum as putea sa fac sa imi afiseze toate numerele ?

#include <iostream>
using namespace std;
int div_pare(int *v,int s,int d){
int mid = (s+d)/2; int x,y;
if(s>d)
	return -1;
else{
	if((v[mid]<0)&&(mid%2==0))
		return v[mid];
	x=div_pare(v,s,mid-1);
	y=div_pare(v,mid+1,d);
	if(x==-1&&y==-1)
		return -1;
	if(x==-1&&y!=-1)
		return y;
	else
		return x;
	}
}
int main(){
	int v[]={1,2,-3,5,6,-8,-1,11,2,-12,-4};
	int n = 11;
int nr=div_pare(v,1,n);
/*
for(int i=1;i<=n;i++)
if((v[i]<0)&&(i%2==0))
{
cout<<v[i]<<" ";
}
*/
cout<<nr;
}



#2
Rhesus

Rhesus

    Senior Member

  • Grup: Senior Members
  • Posts: 2,882
  • Înscris: 22.04.2014
E o problemă creată de tine ? E doat pt. exersare? Întreb deoarece Divide et Imperia nu cred că se pretează pt. o astfel de cerință...

Apropo ce faci instrucțiunile de după un return? De ex. uita-te la la return v[mid]. Dupa aceasta linie, el iese din program, incerci tu sa faci o recursie pe acolo dar degeaba. Iti arunca v[mid] daca if-ul e valid, si ? Mai gandeste-te putin.

Dar revin, Divide et Impera nu se pretează pt. o cerință în care în primul rând, vectorul nu se sortează, iar mai mult, se cer toate valorile care întrunesc o condiție...

Uite o problemă: Folosind Divide et Impera pe un vector sortat, afișați poziția pe care se găsește un număr citit de la tastatură. Dacă nu există numărul, afișează un mesaj.

Edited by Rhesus, 04 September 2015 - 19:07.


#3
masternick

masternick

    New Member

  • Grup: Members
  • Posts: 4
  • Înscris: 31.08.2013
Da, e pentru exersare , da si problema de sus am gasito intrun test .

Uite mai jos codul de la problema care ai propuso tu :

#include <iostream>
using namespace std;
int a=0;
int div_et_imp(int *vector, int first, int last, int number){
if( first != last){
   int mid = (last + first) / 2;
   div_et_imp(vector, first, mid,number);
   div_et_imp(vector,mid + 1,last,number);
  }else
   if(vector[first] == number){
	cout<<first<<" ";
	a=1	 ;}
}
int main(){
	int num_cautat;
	int v[100];
	int n;
	cout<<"n = ";
	cin>>n;
	for(int i = 0;i<n;i++){
		cout<<"v["<<i<<"] = ";
		cin>>v[i];
	}
	cout<<"key = ";
	cin>>num_cautat;
div_et_imp(v,0,n-1,num_cautat);
if(a<1){
	cout<<"Numarul "<<num_cautat<<" nu a fost gasit";
}
}


Ce parere ai de cod , ce imbunatatiri ai face tu ?

#4
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postmasternick, on 04 septembrie 2015 - 19:42, said:

Ce parere ai de cod , ce imbunatatiri ai face tu ?
Cea mai importanta imbunatatire pe care as face-o ar fi sa nu folosesc divide et impera.

Edited by OriginalCopy, 04 September 2015 - 21:23.


#5
masternick

masternick

    New Member

  • Grup: Members
  • Posts: 4
  • Înscris: 31.08.2013

View Postmasternick, on 04 septembrie 2015 - 18:33, said:

Problema: Folosind metoda „Divide et impera” să se scrie programul care afişează toate elementele negative de
pe poziţiile pare ale unui vector de numere întregi.


Am rezolvat si problema de mai sus, cui ii trebuie, o las aici sa fie Posted Image

#include <iostream>
using namespace std;
int v[]={1,22,-3,5,6,-8,-1,11,2,-12,-4};
void div_et_imp(int v[], int first, int last){
if( first != last){
int mid = (last + first) / 2;
div_et_imp(v, first, mid);
div_et_imp(v,mid + 1,last);
}else
if(v[first]<0&&first%2==0)
cout<<" "<<v[first];
}
int main(){
div_et_imp(v,0,10);
}


Edited by masternick, 04 September 2015 - 22:18.


#6
Rhesus

Rhesus

    Senior Member

  • Grup: Senior Members
  • Posts: 2,882
  • Înscris: 22.04.2014
Dar la un for (ceva; conditie; ceva+=2) te-ai gandit? Problema data de tine se face intr-o singura linie de cod. Si nu glumesc.

Edited by Rhesus, 05 September 2015 - 00:12.


#7
masternick

masternick

    New Member

  • Grup: Members
  • Posts: 4
  • Înscris: 31.08.2013

View PostRhesus, on 05 septembrie 2015 - 00:11, said:

Dar la un for (ceva; conditie; ceva+=2) te-ai gandit? Problema data de tine se face intr-o singura linie de cod. Si nu glumesc.

Eu am nevoie sa o fac prin divide it impera ,ca sa inteleg complet cum functioneaza aceasta tehnica.

Mai simplu ,fara DIV , s-ar putea asa de rezolvat :

#include <iostream>
using namespace std;
int main(){
int v[]={1,2,-3,5,6,-8,-1,11,2,-12,-4};
int n = 11;
for(int i=1;i<=n;i++){
	if((v[i]<0)&&(i%2==0))
	cout<<v[i]<<" ";
	}
}



#8
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
Pune -7 pe prima pozitie in vector si vezi ce zice programu tau :w00t:

#9
MarianG

MarianG

    be that as it may

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

View Postmasternick, on 05 septembrie 2015 - 13:50, said:

Eu am nevoie sa o fac prin divide it impera ,ca sa inteleg complet cum functioneaza aceasta tehnica.
pentru asta ai nevoie de o problema care sa necesite divide et impera
pe cand la tine, asa cum bine a evidentiat @Rhesus, se rezolva

 for ( index = 0; index < ARRAYSIZE; index+=2 )
{
	if ( array[index] < 0 )
   {
	   // print or add element to another array
   }
}

index+=2 // adica doar pozitiile pare

#10
MarianG

MarianG

    be that as it may

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

View Postmasternick, on 05 septembrie 2015 - 13:50, said:

Eu am nevoie sa o fac prin divide it impera ,ca sa inteleg complet cum functioneaza aceasta tehnica.
Ma gandesc la un numar natural curpins in intervalul inchis [0, 99]

#11
Rhesus

Rhesus

    Senior Member

  • Grup: Senior Members
  • Posts: 2,882
  • Înscris: 22.04.2014

View PostMarianG, on 09 septembrie 2015 - 23:27, said:

Ma gandesc la un numar natural curpins in intervalul inchis [0, 99]
Ce bun exemplu! Posted Image .Sper să rezolve initiatorul problema ta.

Edited by Rhesus, 10 September 2015 - 00:21.


Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

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