Vidiš G4L, ti bi radio asambly, a nisi znao matrice, je li ti sada jasno zašto smo te odgovarali od asambly-a?
Da jasno mi je.
Vidiš G4L, ti bi radio asambly, a nisi znao matrice, je li ti sada jasno zašto smo te odgovarali od asambly-a?
Da jasno mi je.
Nisam bas shvatio sto pitas no. No ono i<RED je uvjet i petlja se izvrsava dok je i<RED. Mi imamo dva reda pa je RED=2, dok je posljednji clan polja 1. Krecemo sa i=0, pristupamo prvome clanu, onda se i poveca na 1 i pristupamo drugom clanu. I na kraju se i poveca na 2 i petlja se prekine jer vise nije zadovoljen uvjet i<2.
Aha, znaci u ovom slucaju u petlji for uvjetni nastavak treba biti false ???
Petlja se vrti dok je uvjet true , kad je false prestaje ,a kolege su ti rekli da se kreće od nule kad se pristupa vrijednosti(adresi) u prvom polju i prvom stupcu .Vanjska petlja se vrti onoliko koliko ima redova , a za svaki vanjski pomak unutrašnja se izvrti cijela zbog svog uvjeta i kad završi unutrašnja može krenuti ponovo vanjska .Znači iz ovoga što pitaš moraš naučiti unarne operatore , petlje i to kako se koja vrti ako imaš jednu vanjsku i recimo tri unutrašnje itd .Ne bi bilo loše i pokazivače ,znači malo o tome što je heap a što stack ,kad ti to postane jasno onda možeš manipulirati sa petljama kako hočeš.Ako svaladaš takve stvari u C++-u tad možeš i na assembly ..... :)
Jel zna netko kako se u C++ koristi funkcija erfc?
Ne radi mi ovo.. Napišem sljedeći program u C++ ali mi ne radi:
#include<iostream>
#include<cmath>
using namespace std;
double smallx, largex, value;
double erf(double x);
double erfc(double x);
int main (void){
smallx = 0.1;
largex = 10.0;
value = erfc(largex); /* value = 2.088488e-45 */
cout << value <<endl;
system("PAUSE");
}
Jel može pomoć :S
Petlja se vrti dok je uvjet true , kad je false prestaje ,a kolege su ti rekli da se kreće od nule kad se pristupa vrijednosti(adresi) u prvom polju i prvom stupcu .Vanjska petlja se vrti onoliko koliko ima redova , a za svaki vanjski pomak unutrašnja se izvrti cijela zbog svog uvjeta i kad završi unutrašnja može krenuti ponovo vanjska .Znači iz ovoga što pitaš moraš naučiti unarne operatore , petlje i to kako se koja vrti ako imaš jednu vanjsku i recimo tri unutrašnje itd .Ne bi bilo loše i pokazivače ,znači malo o tome što je heap a što stack ,kad ti to postane jasno onda možeš manipulirati sa petljama kako hočeš.Ako svaladaš takve stvari u C++-u tad možeš i na assembly ..... :)
Znam petlje, samo što sam zaboravio da uvjetni nastavak mora biti false, a ne true...
Još ću to sve izvježbati...
Ne radi mi ovo.. Napišem sljedeći program u C++ ali mi ne radi:
#include<iostream>
#include<cmath>
using namespace std;
double largex, value;
double erf(double x);
double erfc(double x);
int main (void){
smallx = 0.1;
largex = 10.0;
value = erfc(largex); /* value = 2.088488e-45 */
cout << value <<endl;
system("PAUSE");
}
Jel može pomoć :S
Pa gdje ti neradi? Je li pogreska u izvodenju, prevodenju itd.
Ne vidim smisao da opet deklariras funkcije erfc i erf kada su one vec deklarirane u biblioteci u koju si ukljucio, I kad si ih nekog nepoznatog razloga deklarirao, zasto ih onda nisi definirao?
Ispred globalnih varijabli ide ::
smallx nije definiran nigdje
Btw ne znam čemu globalne varijeble u ovom programu....
Ima tu još grešaka, nema povratne vrijednosti, intendancija...
#include<iostream>
#include<cmath>
using namespace std;
double largex, value;
int main (void){
largex = 10.0;
value = erfc(largex); /* value = 2.088488e-45 */
cout << value <<endl;
system("PAUSE");
}
Error:
error C3861: 'erfc': identifier not found
Ne vidim smisao da opet deklariras funkcije erfc i erf kada su one vec deklarirane u biblioteci u koju si ukljucio
U kojoj to? Ja vidim samo iostream i math.h... :S
Error:
error C3861: 'erfc': identifier not found
Koliko vidim erfc nije deklarisana. Treba li biti?, mislim da li je to biblioteka cmatha?
Error:
error C3861: 'erfc': identifier not found
Pa zar ne vidis da nisi nigdje definirao funkciju erfc?
Koliko vidim erfc nije deklarisana. Treba li biti?, mislim da li je to biblioteka cmatha?
Ne, jest deklarirana, ali nije definirana.
Ispricavam se, u prethodnoj verziji je bila deklarirana i nedefinirana, sada vise nije ni deklarirana.
I nije dio math.h biblioteke, vidi:
Funkcija erfc se još uvijek nije integrirala u sve verzije c/c++ compilera a obično se nalaziu math.h. Stoga, evo cijeli code funkcije;
double erfc(double x)
{
//
// Computation of the complementary error function erfc(x).
//
// The algorithm is based on a Chebyshev fit as denoted in
// Numerical Recipes 2nd ed. on p. 214 (W.H.Press et al.).
//
// The fractional error is always less than 1.2e-7.
//
//
// The parameters of the Chebyshev fit
//
const double a1 = -1.26551223, a2 = 1.00002368,
a3 = 0.37409196, a4 = 0.09678418,
a5 = -0.18628806, a6 = 0.27886807,
a7 = -1.13520398, a8 = 1.48851587,
a9 = -0.82215223, a10 = 0.17087277;
//
double v = 1; // The return value
double z = fabs(x);
//
if (z == 0) return v; // erfc(0)=1
double t = 1/(1+0.5*z);
v = t*exp((-z*z) +a1+t*(a2+t*(a3+t*(a4+t*(a5+t*(a6+
t*(a7+t*(a8+t*(a9+t*a10)))))))));
if (x < 0) v = 2-v; // erfc(-x)=2-erfc(x)
return v;
}
Sviđa mi se ovo rješenje sa aritmetikom pokazivača, samo u petlji while trebalo bi kao uvjet staviti vrijednost varijable na koju pokazivač pokazuje, a ne adresu na koju pokazuje while(*n), pošto prekidni znak char niza ima dekadsku vrijednost 0.
Postoji još način kako zaobići if uvjet u ovom programu koristeći dekadske vrijednosti ascii znakova. Kroz petlju zbrojimo jedinice u nizu, a onda tu vrijednost korigiramo tako da oduzmemo zbroj nula, kao polaznu točku uzmemo duljinu string niza.
#include<iostream>
#include<string>
using namespace std;
int main ()
{
string niz = "1011010101";
int suma = 0;
for(int i=0; i<niz.length(); i++)
{
suma += niz[i] - 48;
}
suma = suma - (niz.length() - suma);
cout<< suma << endl;
return 0;
}
Zašto ovdje ide suma+= niz[i] - 48??
Jel mi može to netko malo pojasniti
Sviđa mi se ovo rješenje sa aritmetikom pokazivača, samo u petlji while trebalo bi kao uvjet staviti vrijednost varijable na koju pokazivač pokazuje, a ne adresu na koju pokazuje while(*n), pošto prekidni znak char niza ima dekadsku vrijednost 0.
Postoji još način kako zaobići if uvjet u ovom programu koristeći dekadske vrijednosti ascii znakova. Kroz petlju zbrojimo jedinice u nizu, a onda tu vrijednost korigiramo tako da oduzmemo zbroj nula, kao polaznu točku uzmemo duljinu string niza.
#include<iostream>
#include<string>
using namespace std;
int main ()
{
string niz = "1011010101";
int suma = 0;
for(int i=0; i<niz.length(); i++)
{
suma += niz[i] - 48;
}
suma = suma - (niz.length() - suma);
cout<< suma << endl;
return 0;
}
Zašto ovdje ide suma+= niz[i] - 48??
Jel mi može to netko malo pojasniti
U ascii kodu za broj 2 ti je 50 i sad kad oduzmeš 50-48 = 2 a tolika ti je suma i to je to .Sve gledaj kroz prizmu ascii koda . Zato je tamo taj 48 da bi dobio pravu vrijednost .Znači da bi dobio brojčanu vrijednost moraš znakovni brojčani ekvivalent prevesti u ascii kod i od njega oduzeti 48 ,a 48 je brojčani ekvivalent za znak broja 0 .
Pozdrav ljudi! Evo imam jedno pitanje. Zanima me kako ukloniti neki red i stupac 2D niza.
Pozdrav ljudi! Evo imam jedno pitanje. Zanima me kako ukloniti neki red i stupac 2D niza.
U pravilu je rijec o obicnom kopiranju elemenata, koji dolaze nakon elementa koji brises, jedno mjesto unaprijed (i eventualnom oslobadanju memorije ako koristis dinamicki alocirano polje). Jel' znas uklanjati elemente iz jednodimenzionalnog niza? Princip ti je isti, samo sto sada radis u jednoj dimenziji vise.
Problem je sto je, kod staticki alociranih polja, "brisanje" redova i stupaca gotovo beznacajno buduci da im se ne mjenja stvarna velicina, nego se ostali elementi pomicu samo za jednu poziciju nize. Cime program nakon npr. uklanjanja jednog reda nikako ne moze znati da polje sada ima jedan red manje, te da ne treba vise ispisivati cetiri, nego samo tri reda.
Evo ti programcic koji ce ti to malo slikovitije prikazati:
#include <stdlib.h>
#include <stdio.h>
void ispisi(int niz[][4])
{
int x, y;
for (y=0; y<4; y++)
{
for (x=0; x<4; x++)
printf("%d ", niz[y][x]);
printf("\n");
}
}
int main()
{
int niz1[4][4]={{1, 2, 3, 4},
{1, 2, 3, 4},
{1, 2, 3, 4},
{1, 2, 3, 4}};
int niz2[4][4]={{1, 1, 1, 1},
{2, 2, 2, 2},
{3, 3, 3, 3},
{4, 4, 4, 4}};
int x, y, brisati;
printf("Niz1 prije brisanja:\n");
ispisi(niz1);
//ukloni drugi stupac
brisati=1;
for (y=0; y<4; y++)
for (x=brisati; x<3; x++)
niz1[y][x]=niz1[y][x+1];
printf("\nNiz1 nakon brisanja:\n");
ispisi(niz1);
printf("\nNiz2 prije brisanja:\n");
ispisi(niz2);
//ukloni treci redak
brisati=2;
for (y=brisati; y<3; y++)
for (x=0; x<4; x++)
niz2[y][x]=niz2[y+1][x];
printf("\nNiz2 nakon brisanja:\n");
ispisi(niz2);
system("pause");
return 0;
}
Kod dinamicki alociranih polja imas pogodnost sto za izbrisane elemente mozes koristiti NULL cime mozes odrediti barem jednu dimenziju niza.
I znam da sam obrnuo redoslijed x i y, te da u oznacavanju koordinata x ide prvi, ali to ima veze s nacinom na koji si ja vizualiziram 2D polje u glavi, pa stoga elementima pristupam "obratno". :P
Pozdrav ljudi da li netko zna rijesiti ovaj zadatak: Npravite program koji ce sa tipkovnice unositi troznamenkasti broj. Ako broj nije troznamenkast zavrsiti izvođenje programa.Napraviti program koji ipisuje sve prirodne brojeve koji su manji od unešenog broja. Ispis brojeva neka bude jedan ispod drugoga....
prvi dio ide ovako i to znam da je dobro.... ali dalje ovaj drugi dio ne znam
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
cout << "Unesi troznamenkasti broj :"<< endl;
int broj;
cin >> broj;
if(broj < 100 ||broj > 999)
{
cout<<" Broj nije troznamenkast !!!" << endl;
}
for(int i=1; i<=broj; i++)
{
cout<<i<<endl;
}
Imam nekakav string niz koji unosim sa tipkovnice.. Želim da taj niz bude binarni i kada se unese broj različit od 1 ili 0 da javi grešku..
Uradio sam na sljedeći način ali baš ne radi
string niz;
int i;
cout<<"Unesi binarni niz "<<endl;
cin>>niz;
for(i=0; i<niz.length(); i++){
if(niz[i]!=0 || niz[i]!=1){
cout<<"Niz nije binaran!"<<endl;
break;
}
}
Imam nekakav string niz koji unosim sa tipkovnice.. Želim da taj niz bude binarni i kada se unese broj različit od 1 ili 0 da javi grešku..
Uradio sam na sljedeći način ali baš ne radi
...
Ne bi li za znakove kada ih treba prepoznavati trebao stavljati 0 i 1 pod navodnike jer sam znak i njegova ASCII vrijednost nisu isto?
Isprobaj ovako:
string niz;
int i;
cout<<"Unesi binarni niz "<<endl;
cin>>niz;
for(i=0; i<niz.length(); i++){
if(niz[i]!='0' || niz[i]!='1'){
cout<<"Niz nije binaran!"<<endl;
break;
}
}
Imam nekakav string niz koji unosim sa tipkovnice.. Želim da taj niz bude binarni i kada se unese broj različit od 1 ili 0 da javi grešku..
Uradio sam na sljedeći način ali baš ne radi
...
Ne bi li za znakove kada ih treba prepoznavati trebao stavljati 0 i 1 pod navodnike jer sam znak i njegova ASCII vrijednost nisu isto?
Isprobaj ovako:
string niz;
int i;
cout<<"Unesi binarni niz "<<endl;
cin>>niz;
for(i=0; i<niz.length(); i++){
if(niz[i]!='0' || niz[i]!='1'){
cout<<"Niz nije binaran!"<<endl;
break;
}
}
Da, ovo sa podnavodnicima je u redu i trebaju biti oni.. Ali sam sada skužio da nije dobro postavljeno nešto drugo.. ako unesem niz 1010 javljat će opet grešku jer prvi string nije 0, a drugi nije 1, itd..
Ovako radi:
string niz;
int i;
cout<<"Unesi binarni niz "<<endl;
cin>>niz;
for(i=0; i<niz.length(); i++){
if(niz[i]=='0'||niz[i]=='1'){
cout<<"U redu!"<<endl;
}
else
cout<<"Greška!"<<endl;
}
Jesi sigurno dobro definirao string kao niz od charova?
if(niz[i]!='0' && niz[i]!='1'){
Radi se o pogresno postavljenom uvjetu. Tvoja verzija kaze: "Ako niz[i] nije 0 ili ako niz[i] nije 1", znaci ili - ili. Ako je jedan od uvjeta istinit izvrsi if blok (a jedan od uvjeta ce uvijek biti istinit jer niz[i] ne moze imati istovremeno dvije vrijednosti i 0 i 1)
Moja verzija kaze: "Ako niz[i] nije 0 i ako niz[i] nije 1". Tj oba uvjeta moraju biti zadovoljena, ako niz[i] nije niti 0 niti 1 izvrsit ce se if blok.
Tablica istinitosti OR
1 0 1 0
1 1 0 0
-------
1 1 1 0
Tablica istinitosti AND
1 0 1 0
1 1 0 0
-------
1 0 0 0
Pronašao sam na netu sljedeću lower incomplete gamma funkciju(koja dobro radi):
double incgamma (double x, double a){
double sum=0;
double term=1.0/a;
int n=1;
while (term != 0){
sum = sum + term;
term = term*(x/(a+n));
n++;
}
return pow(x,a)*exp(-1*x)*sum;
}
Meni bi sada trebala upper incomplete gamma funkcija, a glavna razlika između ove dvije funkcije je samo u određenom integralu koji kod lower funkcije ide od nule do x, a kod upper funkcije od x do beskonačnosti, a vidi se na formuli na sljedećoj stranici. Kako bih mogao izmjeniti ovu funkciju ili ako netko zna gdje bih na netu mogao pronaći ovu gotovu funkciju..pretražio sam pola neta ali nisam uspio pronaći :P
Vidio sam na youtube -u dosta komentara da je C# bolji od C++ -a sto se tice
izrade igre. Je li to točno ?
Igru ne možeš napisati niti u jednom niti u drugom bez frameworka, ma kakva su to pitanja, ti ideš predaleko i prebrzo!
C# i XNA su odlična kombinacija, to je to što ti ja mogu reći. Ovjde nemaš puno game devova, ja znam jedino woodgamesfx, radio je C# i XNA.
BTW, dobar ti je izvor...
Igru ne možeš napisati niti u jednom niti u drugom bez frameworka, ma kakva su to pitanja, ti ideš predaleko i prebrzo!
C# i XNA su odlična kombinacija, to je to što ti ja mogu reći. Ovjde nemaš puno game devova, ja znam jedino woodgamesfx, radio je C# i XNA.
BTW, dobar ti je izvor...
Ne idem predaleko, ne planiram raditi igru (nemam dovoljno znanja za to) sve dok ne naucim ono sto trebam (a sada su to osnove) :)
BTW Hvala na korisnim informacijama.