C++ Pomoc

Sakim

Zainteresovan član
Poruka
168
Da li neko zna kako da napravim niz u c++(MVS 2008) tako da mu korisnik definise velicinu.Uspeo sam ovo da uradim u Code Block tako sto sam prvo uneo promenljivu i nda samo stavio u velicinu niza ali u C++ nece.Kolko sam ja skonto to je nemoguce jer kompajler sve radi odjednom ili tako nesto, nasao sam na netu da ima kao fazon preko pokazivaca ali mi nista nije jasno,Da li moze neko objasniti te proklete pokazivace i kako da uraim taj niz?
 
Pod "veličinu" misliš koliko članova niza ima?

Kod:
---BEGIN---
-----UNOS BROJA CLANOVA NIZA-----
-----FOR I=1 TO N DO
-------UNOS I-TOG CLANA NIZA-------
 
mozes na primer
da definises neki niz celobrojnih brojeva na primer.


int* niz;

i onda uneses neki broj n;

i onda definises kao niz = new int [n];

i onda posle kroz for petlju,uneses elemente niza i to je to.


sa tom velicinom niza,misli se na alociranje memorije.
 
nece ovo mi izbaci
e:\fail\1\1\1.cpp(10) : error C2057: expected constant expression
e:\fail\1\1\1.cpp(10) : error C2466: cannot allocate an array of constant size 0
e:\fail\1\1\1.cpp(10) : error C2133: 'niz' : unknown size

Kad sam pito profesora on mi je reko da treba da naprav tako da program tretira adrese kao clanove niza pa kad smesti jednu velicinu u 1. adresu da predje na drugu(prepisivanjem nule ili tako nesto),i da moram da brisem to iz adrese posle rada.Uopste nemam ideju kako bi to izgledalo
 
// Evo ti primer sa tom velicinom niza.

Kod:
#include <iostream>
using namespace std;

int main ()
{
	int* niz;
	int n;

	cout << "Unesite broj: "; cin >> n;

	niz = new int [n];

	cout << "Unesite clanove niza: ";
	for(int i=0;i<n;cin >> niz[i++]);
	
	cout << endl;
	cout << "Clanovi niza su: ";
	for(int i=0;i<n;cout << niz[i++] << " " );

        delete [] niz;  // dealokacija memorije ili "brisanje" memorije.


}
 
Poslednja izmena:
e hvala puno raid super.
Nego imam sad zadatak da izracunam sinus rucno
i to preko Meklaurenovog polinoma koi glasi sinx=suma od 0 do n (kolko precizno) (-1) na n step puta x(ugao) na 2n+1 step / (2n+1)!
i ovako izgleda moj kod
Kod:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
float deg(float a,float b)
{   
	float i,c=1;
	for (i=0;i<=b;i++) 
	{
		c=a*c;
	}return(c);
}
float fakt(float e)
{ float g=1,f;
	for(f=0;f<=e;f++)
	{
		g=g*f;
	}
	return(g);
	}
void main()
{
	float i,x,n,m,rez;
	cin>>n;
	cin>>x;
    rez=0;
	for (i=0;i<=n;i++)
	{
	 m=2*i+1;
	 rez=rez+deg(-1,i)*deg(x,m)/fakt(m);
	}
	cout<<rez;
}

znam da moze drugacije ali ovo bi trebalo da radi,ali ne radi a je ne kontam zasto,pa da li neko vidi gde je problem i Ako moze da mi objasni kako da dignem watch window tj kako radi ,znam da treba da ubacim breakpoints na redove koje hocu da gledam ali sta onda?
 
prvo,moras malo da poradi po pisanju koda.pre svega mislim an funkcije koje pises,i ako imas razlicite funkcije u kojima koristis for petlje nemas potrebe da koristis u svakoj funkciji drugacije promenljive,mozes svuda da koristis i,lakse ti je tako.


drugo faktorijal funkciju si lose napisao,i ona ce uvek vratiti vrednost 0,jer na pocetku for petlje koristi g =g * 0;tj g=0 kroz celu petlju


nemas potrebe da u for petlji koristis blok ako u tom bloku imas samo jednu naredbu.

pogledaj malo bolje Meklaurenov polinom,tj u stvari specijalan oblik Tejlerovog polinoma.posto ti je f(x) = sinx ,imas samo dva moguca vrednosti izvoda

za neparni izvod cosx ili -cosx
za parni izvod sinx ili -sinx

gledaj da smislis algoritam kako da uklopi kada radis sumu sa tim.


drugo nemas potrebe da pises return(g),opusteno pisi return g,gledaj da sto manje kucas :) mislim sada mislis to je dve zagrade ali ono,kada pises 100 funkcija nisu samo 2 vishe..
 
Poslednja izmena:
Pa... promenio sam sve to i sad radi ali izgleda netacno.Nije mi bas jasno sta je N sto unosim(jel to stepen tacnosti),x je ugao...kad mu ubacim 3.14 tj Pi treba da mi izbaci 1 a on mi izbaci 0.0049999*.?????
Kod:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
using namespace std;
float deg(float a,float b){float i,c=1;
for (i=0;i<=b;i++) 
{
	c=a*c;
}return c;}
float fakt(float a)
{
	float b=1,i;
	for(i=1;i<=a;i++) 
	{
		b=b*i;
	}return b;}
void main()
{
	float l,i,x,n,m,rez;
	cin>>n;
	cin>>x;
	cin>>l;
    l=sin(l);
    rez=0;
	for (i=0;i<=n;i++)
	{
	 m=2*i+1;
	 rez=rez+deg(-1,i)*deg(x,m)/fakt(m);
	}
	cout<<rez;
	cout<<"\n";
	cout<<l;
}

sin i l sam stavio ze referncu;
 
n ti je stepen izvoda,tj stepen do kog razvijas funkciju : ) pazi nemas potrebe koristiti funkciju sinx.

http://mathworld.wolfram.com/MaclaurinSeries.html evo kako izgleda taj polinom.tj posto je to specijalan slucaj Tejlerovog polinoma,samo sto se ovde razvija u okolini nule.

Imas prvo sin(0) =0; posle imas izvod od sinus,to ti je cos0=1;pa opet -sinx0=0;pa sledeci izvod - cosx=-1,
pa sinx=0;

pored svakog sinx/cosx imas odgovarajuci stepen. tj samo treba da vodis kada je nula a kada je 1.

evo ti moj kod,bilo mi lakse da napisem novo,nego tvoj da sredjujem : )
nadam se da sam pomogao,ako nesto nije jasno pitaj ; )

Kod:
#include <cmath>
#include <iostream>
using namespace std;

int faktorijal (int n){                       // Funkcija za odredjivanja faktorijala celog broja. 
	int c=1;				 // Nema potrebe da ti vraca float vrednost,jer mozes odrediti
	for(int i=1;i<=n;i++)		 // samo faktorijal celih brojeva.
		c*=i;
	return c;
}

float radijani (float x)		 // Posto unosis stepene,treba ih konvertovati u radijane,da bi funkcija dobill
{					 // tacnu vrednost.Najbolje to da razumes nacrtaj u nekom programu funkcije
	return x*0.0174532925; }	 // sinx ili cosx i gledaj x osu i razumeces.

float mcl (float x,int n){		// Funkcija za izracunavanje datog polinoma.
	float rez=0;
	int koef=1;
	for(int i=1;i<=n;i++) 
		if(i%2!=0) {
			rez=rez + (1/(double)faktorijal(i))*koef*pow(radijani(x),i);
			if(koef==1) koef=-1;
			else if(koef==-1) koef=1;
		}
		return rez;
}

void main ()
{
	int n;
	float x;
	cout << "Unesite stepen izvoda dok kog zelite da razvijete funkciju sinx: "; cin >> n;
	cout << endl << "Unesite ugao: "; cin >> x;
	cout << endl << "Vrednost funkcija sinx razvijene do izvoda " << n << ".tog stepena za ugao " << x << " je: " << mcl(x,n);
}
 
Poslednja izmena:
Uf...Kad sam pito prof reko da ne marim za Tajlerov nego samo da napisem program za sumu,al sad kontam u cemu je problem
Nije mi jasan uslov if(i%2!=0) sta znaci?i gde si izvuko funkciju da pretvaras ugao u rad?

(1/(double)faktorijal(i))*koef*pow(radijani(x),i) ovaj deo takodje sta je to double u zagradi?sta je pow?
fala na kodu
 
Uf...Kad sam pito prof reko da ne marim za Tajlerov nego samo da napisem program za sumu,al sad kontam u cemu je problem
Nije mi jasan uslov if(i%2!=0) sta znaci?i gde si izvuko funkciju da pretvaras ugao u rad?

(1/(double)faktorijal(i))*koef*pow(radijani(x),i) ovaj deo takodje sta je to double u zagradi?sta je pow?
fala na kodu

1. uslov za i%2!=0;pazi imas prvo da ti je sinx = f(0) + f'(0)*x + ... + f^n(0)*x^n

posto ti koeficijenti pored x idu, sin0 pa cos0 pa -sin0 pa -cos0 pa sin0 (u stvari to su sve i-ti izvodi on sinx)
ja sam uzeo za for petlju da mi krece od 1,tj kada proveravam f'(0)*x,jer tu ti je prvi izvod od sin0 a to ti je cos0 sto je jednako 1. kod sledeceg stepena imaces izvod od cos0 a to je -sin0=0 pa taj deo ne racunas (tj sabiras),pa onda posle imas -cos0 = -1.

zbog toga sam ufeo int koef = 1. jer imas da dobijas cos0 pa -cos0 pa opet cos0 i tako u krug
i onda kada izracunam deo sa prvi cos0,koeg stavim =-1,zbog sledeceg racuna tj -cos0 = -1

ugao da pretvoris u radi,trazi na guglu,imaces formulu : )


(1/(double)faktorijal(i))*koef*pow(radijani(x),i)


(double) ti je poznat kao cast u C-u,i C++,tj ako imas na primer neku velicinu int,i zelis samo da je u toj operaciji iskorist kao double a da ta velicina i posle ostane int,koristis ovde.posto ti je ovde1/nesto....a to nesto je int,ti moras da ga castujes u double jer ces dobiti double velicinu (cim delis),jer ako ne stavis,kompajler ce prijaviti gresku


pow(x,y) ti je matematicka funkcija za stepenovanje koja se nalazi u <cmath> i u <math.h>
gde se smatra da su x i y double velicine ali ne mora biti,x je izlozilac,a y je stepen : )
 
ma skonto sam to oko funkcije nego taj uslov ne znam sta znaci aj ga prevedi
i%2!=0 ako je i _____ sa dva ____=0?
znam da %% je i tj. and a || je ili tj. or.

Hvala ti za pow nisam znao da ima.:)
 
a to, pa % ti je operator za deljenje po modulu nekog broja,tj rezultat toga je ostatak broja deljenjem nekim brojem : )

tj i % 2 moze biti jednako 1 ili 0

%% nije jednako AND : ) vec && : D
 
Da ja se zajebo,dobro znaci time odrejujemo parnost a sta je ! ? i jel u pow mora biti double?
nikad ga nisam koristio koji mu je opseg,i zasto mora biti double..i da jel ima C++ funkciju za kompleksne brojeve?
 
pa ne samo parnost,tj ostatak deljenja nekim brojem,umesto 2 moze biti bilo koj broj : )
u pow ne mora biti double,ali zna kompajler da zeza,kada imamo pow(x,y) a da su x i y int velicine

! ti je operator za negaciju,!= - nije jednako

na primer kada imas da ti je pok neki pokazivac,u proveravas if(!prvi) { ... } a naredbe u bloku se izvrsavajau ako i samo ako prvi nije jednako NULL.

za komplexne brojeve imas genericku klasu u biblioteci <complex>,ali kontam da ce ti bolje biti da napravis sopstvenu klasu i u njoj definishes sve sto ti je potrebno.
 
Cek kako nije jednako ...zar ne mora u uslovu da stoji == ako proveramo nesto .Jesi mu ti dodelio vrednost u uslovu?? ili je operater ustavri uzvicnik+jednako.

znaci uslov se prevodi ako (i mod 2 nije jednako 0)?

E i ovo me jako zanima!Vec nekoliko puta susrecem da ljudi pisu proizvod i kolinik ovako a *= b ,a/=b,na wikipediji pise Assignment by multiplication al ne kapiram sta radi.Sigurno nije normalno mnozenje.

Jel postoji bool u c++ i kako se definise?
 
"!=" je operator za 'nije jednako' : )


a*=b je isto sto a = a * b; : ) to se jos u C-u koristilo : )


definishe ti se kao bool promenljiva; de moze imati vrednost true ili false : )
 
Poslednja izmena:
aaaaa....sad kontam.Nego jel zna neko gde mogu da nadjem zadatke za C++ sa resenjima???
P.S.Nemam para da kupujem knjige.

ima u bgu knjiga od lasla krausa,ja sam iz nje ucio (doduse to mi je bila literatura na faxu) 230 dinara je kopija.

ovako mogu da ti posaljem izvorne kodove iz te knjige,ali moracu da sredim za zadatke posto je sve razbacano.
 
Mislio sam nesto na netu ali moze i to.Fala

Nesto ovakvo?

http://poincare.matf.bg.ac.rs/~jtomasevic/courses/prog0809/vezbe.htm
http://poincare.matf.bg.ac.rs/~biljana/p1_vezbe.html
http://poincare.matf.bg.ac.rs/~milan/?content=p1_classes
http://poincare.matf.bg.ac.rs/~milan/?content=p2_classes

Nadam se da ce pomoci....
Imas jos asistenata koji drze p1 i p2 pa nadji na sajtu fakulteta kad budes imao vremena...
http://www.matf.bg.ac.rs/ , pa nastava, nastavno osoblje...i tu pogledas asistente, saradnike u nastavi i ev. docente ;)
pozz
 
Poslednja izmena:

Back
Top