Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cum accesez site-ul CNAS ?

Algoritm simplu de calculare al u...

Bitdefender Total Security ș...

casa verde 2024
 Intrerupator cu N - doza doar cu ...

Incalzire casa fara gaz/lemne

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...
 

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,197
  • Î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,383
  • Î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,197
  • Î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,197
  • Înscris: 24.02.2007
E usor de inlocuit sortarea in acest caz, dar n-am vrut sa-mi bat capul :)

Anunturi

Second Opinion Second Opinion

Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale.

Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit.

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