Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Tatuator handpoke

Plaja de nudisti in Grecia?

Mufa microusb a telefonului mobil...

"Ciudatenii" control pasa...
 Impamantare

Apple maps pe Windows 10

Sfarsitul woke-ismului si al core...

Renovare completa + pompa de cald...
 Libre Office nu vad liniile

Modalitați amuzante și ...

O disparitie de ani buni, Acces D...

Mancarea e scumpa
 Parere achiziționare BMW G20

Schimbarea bateriei moderne la VA...

Rostschreck Lidl

Si noi suntem Florin Piersic? / J...
 

Functii si parametri

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

#1
George02

George02

    Member

  • Grup: Members
  • Posts: 356
  • Înscris: 09.01.2011
Lucrez pentru BAC si in una din variante am intalnit urmatoarea problema :

[ http://s14.postimg.org/c2u4mh2b5/problema.jpg - Pentru incarcare in pagina (embed) Click aici ]

cum ar trebui sa arata header-ul functiei ?  Ce am incercat :

int sir(int n , int& a[20]){
// da eroare la compilare spunand ca nu se poate da un array prin referinta
}

int sir(int n, int& a){
//cand incerc a[i] = 1 da eroare.
}


int sir(int n,int& a){
for(int i = 1; i <= n ; i++){
	 if(i <= 2){
		 a[i] = 1;
	 }else if( i > 3){
		 a[i] = 3*sir(i-1,a) - sir(i-2,a);
	 }
}
return a[i];
}



Si o alta chestie ar fi aceea ca :-?? dupa parerea mea S3 nu exista deci e gresita problema . Corectati-ma daca gresesc .

Edited by George02, 18 April 2014 - 13:34.


#2
potae

potae

    Sorosist frumos si liber

  • Grup: Senior Members
  • Posts: 3,429
  • Înscris: 20.08.2013
E un retardat cine a facut cerinta. Nu poti face intr-o singura functie toata treaba fara sa apelezi la tot felul de smecherii. In primul rand trebuie sa verifici daca n < 3 sau n > 20 insa daca i-ai da drumu' mai departe cu recursivitatea nu ai cum sa faci n <= 2 fiindca nu s-ar mai putea indeplini conditia n > 3...

#3
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,255
  • Înscris: 24.02.2007
Un array e prin definitie (in C/C++) un pointer.
int sir(int n, int a[20])
{
  a[0] = 1;
  a[1] = 2;
...
}



#4
George02

George02

    Member

  • Grup: Members
  • Posts: 356
  • Înscris: 09.01.2011
Mersi de lamurire . Despre existenta lui S3 ce zici ?

#5
George02

George02

    Member

  • Grup: Members
  • Posts: 356
  • Înscris: 09.01.2011

 George02, on 18 aprilie 2014 - 18:27, said:

Mersi de lamurire . Despre existenta lui S3 ce zici ?


UPDATE : Nu reusesc sa ii dau de cap ... ce ar trebui sa imi returneze functia ? (ar trebui sa imi returneze 1 daca n <2 si 3*Sn-1 - Sn-2 daca n > 3) dar :-?? nu stiu cum sa fac sa stochez si in vector valorile .


#6
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
Pai tu sa ne zici. Care sunt datele de intrare, care trebuie sa fie datele de iesire si cum le mapezi pe parametrii si valoarea returnata de functie?

#7
George02

George02

    Member

  • Grup: Members
  • Posts: 356
  • Înscris: 09.01.2011

 TS030, on 18 aprilie 2014 - 20:34, said:

Pai tu sa ne zici. Care sunt datele de intrare, care trebuie sa fie datele de iesire si cum le mapezi pe parametrii si valoarea returnata de functie?

datele de intrare sunt : n
datele de iesire sunt : valoarea lui Sn ce trebuie si stocata in tabloul unidimensional

Nu stiu cum "sa le mapez pe parametrii si valoarea returnata de functie".

#8
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
"Valoarea lui Sn"? E una singura?

Hai sa te-ajut un pic:
Datele de intrare: un numar intreg mai mare sau egal cu 3. Pentru asta ai parametrul "n".
Datele de iesire: sirul S1, S2, ..., Sn - generat conform regulii date in textul problemei - stocat intr-un array unidimensional. Problema specifica faptul ca acest array e primit tot ca parametru (de iesire): "a"; si vom presupune ca validarile necesare sunt efectuate de apelant.

Bun, si-acum: ce ai vrea sa returneze functia?

Edited by TS030, 18 April 2014 - 21:29.


#9
MarianG

MarianG

    be that as it may

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

 George02, on 18 aprilie 2014 - 20:45, said:

datele de intrare sunt : n
datele de iesire sunt : valoarea lui Sn ce trebuie si stocata in tabloul unidimensional

Nu stiu cum "sa le mapez pe parametrii si valoarea returnata de functie".

Indiferent de valoarea naturala a lui n, programul tot va trebui sa calculeze S3 --
punct in care logica celui care a formulat cerinta a incetat sa existe

Edited by MarianG, 18 April 2014 - 22:39.


#10
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
Trebuie doar "n >= 3" in loc de "n > 3".

#11
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,255
  • Înscris: 24.02.2007
Ce recursivitate fratilor? E o problema banala.
#include <stdio.h>

int compara(const void* _x, const void* _y)
{
	int x = *((int*)_x);
	int y = *((int*)_y);

	if (x % 2 == y % 2)
		return x - y;
	if (y % 2)
		return 1;
	return -1;
}

void sir(int n, int a[])
{
	int i;
	for (i = 0; i < n; i++)
	{
		if ((i + 1) <= 2)
		{
			a[i] = 1;
		}
		else 
		{
			a[i] = 3 * a[i - 1] - a[i - 2];
		}
	}
	qsort(a, n, sizeof(int), compara);
}

int main()
{
	int a[6];
	sir(6, a);

	int i;
	for (i = 0; i < 6; i++)
	{
		printf("%d ", a[i]);
	}
}



#12
ccdsah

ccdsah

    Senior Member

  • Grup: Senior Members
  • Posts: 2,581
  • Înscris: 16.03.2013
Quick sort are complexitate O(n^2) in cazul cel mai rau si O(n*log(n));
Algoritmul la are m-am gandit eu foloseste 2 siruri s, si sirul a
Astfel s[1]=1; s[2]=1;nr_imp=2;a[1]=1;a[2]=1;
pentru i de la 2 la n executa s[i]=3*s[i-1]-s[i-2]; daca s[n] e impar atunci incrementez nr_imp; a[nr_imp]:=s[i];
sfarsit pentru
pentru i de la 3 la n executa
daca s[i] e par atunci incrementez nr_imp; a[nr_imp]=s[i];

Complexitate O(2*n)
Pentru lungimea maxima a sirurilor (n<20) mi se pare mai util sa folosesc un sir in plus decat sa fac o sortare fie ea si quicksort

#13
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,255
  • Înscris: 24.02.2007
E usor de inlocuit sortarea in acest caz, dar n-am vrut sa-mi bat capul :)

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