Moj problem nitko ništa?
Ubuntu 12.04 LTS, Qt Creator, gcc kompajler, najnormalnije radi.
Moj problem nitko ništa?
Ubuntu 12.04 LTS, Qt Creator, gcc kompajler, najnormalnije radi.
Moj problem nitko ništa?
Probao sam i ja, normalno se kompajlira i pokreće.
Linux Mint 15, NetBeans, g++
DevCpp ti kaže da nije kompajliran jer ne može pronaći executable koji je nastao kompajliranjem. Tko će ga znati jesi li ti nešto zbrljao sa podešavanjem imena programa u projektu, ili je putanja zbunila DevCpp (a možda čak i GCC).
Jesi siguran da ne radi? Nisi ga ni pokušao pokrenuti 'izvana' nego samo kroz DevCpp.
Moj problem nitko ništa?
Ubuntu 12.04 LTS, Qt Creator, gcc kompajler, najnormalnije radi.
Probao sam i ja, normalno se kompajlira i pokreće.
Linux Mint 15, NetBeans, g++
Pa znam da kod radi jer mi radi u VS2008. Problem je u tome što kad taj program prenesem na drugo računalo - tamo ne radi.
DevCpp ti kaže da nije kompajliran jer ne može pronaći executable koji je nastao kompajliranjem. Tko će ga znati jesi li ti nešto zbrljao sa podešavanjem imena programa u projektu, ili je putanja zbunila DevCpp (a možda čak i GCC).
Jesi siguran da ne radi? Nisi ga ni pokušao pokrenuti 'izvana' nego samo kroz DevCpp.
Ne, uopće ne napravi executable. Ne mogu ga pokrenuti izvana kad ga nema.
Možda Dev-C++ nije nikako kompatibilan s Windows 8? Nemam drugog objašnjenja.
U VS2008 kod radi. Kompajliram bez problema, debugam bez problema, prebacim izvršnu datoteku na stick i na druga računala - ne radi.
Mislim da je do nekakvog linkanja (ono statičko-dinamičko), ali nisam baš ponajbolje upoznat s time - stoga trebam samo rješenje problema.
Radi i u Code::Blocks (alat kojeg nikad prije koristio nisam a djeluje fenomenalno na prvi pogled).
Sad samo trebam prebaciti exe na drugi komp da vidim jel radi. :)
Exe iz Code::Blocks radi. Evo i link:
Možda Dev-C++ nije nikako kompatibilan s Windows 8? Nemam drugog objašnjenja.
A što piše u compile logu?
Bude prazan ak ose ne varam.
Bude prazan ako se ne varam.
E pa budi siguran. U compile logu se najmanje mora spominjati gcc.exe (g++.exe ako kompajliraš .cpp ili .cxx datoteku), a možda i ld.exe (linker), te windres.exe (kompajler za resurse).
Ako bude prazan onda se iz nekog razloga kompajler odbija izvršiti ili ga jednostavno nema, treba provjeriti postavke devcpp-a. A da nisi i ti možda skinuo verziju bez kompajlera (postoji i takva verzija).
Ovo je link za punu verziju sa svime:
http://prdownloads.sourceforge.net/dev-cpp/devcpp-4.9.9.2_setup.exe
Bude prazan ako se ne varam.
E pa budi siguran. U compile logu se najmanje mora spominjati gcc.exe (g++.exe ako kompajliraš .cpp ili .cxx datoteku), a možda i ld.exe (linker), te windres.exe (kompajler za resurse).
...
Tu verziju i imam.
Evo što kaže u tom logu:
Compiler: Default compiler
Building Makefile: "C:\Dev-Cpp\cherry mx\Makefile.win"
Finding dependencies for file: C:\Dev-Cpp\cherry mx\main.cpp
Executing make...
make.exe -f "C:\Dev-Cpp\cherry mx\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"
make.exe: *** [main.o] Error -1073741819
Execution terminated
DevCpp.. alat u kojemu vječito treba nešto podešavati.
Dakle vjerojatno make je kriv. Ajde probaj ukloniti razmake u putanji. A možeš probati kompajlirati direktno i .cpp datoteku bez projekta...
DevCpp dolazi sa starom verzijom MinGW-a, a ti još koristiš Win8.
Mislim ono, koliko muke po kompajliranju par linija konzolnog programčića.
Ovako ekipa imam problem sa OpenCVom i Visual studiom 2010, pratio sam ovaj tutorial za instalaciju
Visual studio je 2010 Ultimate 32bit na windows 8 64bit
#include <opencv\cv.h>
#include<iostream>
#include <opencv\highgui.h>
using namespace std;
using namespace cv;
int main(){
//create Matrix to store image
Mat image;
// initialize capture
VideoCapture cap;
cap.open(1);
// create window to show image
namedWindow(“window”, CV_WINDOW_AUTOSIZE);
while(1){
// copy webcam stream to image
cap>>image;
// print image to screen
imshow(“window”, image);
// delay 33ms
waitKey(33);
}
return 0; }
Ovo je kod izbacuje gresku
1>------ Build started: Project: myNewOpenCV, Configuration: Debug Win32 ------
1> main.cpp
1>f:\projekti\programiranje\mynewopencv\mynewopencv\main.cpp(20): error C2065: '“window”' : undeclared identifier
1>f:\projekti\programiranje\mynewopencv\mynewopencv\main.cpp(29): error C2065: '“window”' : undeclared identifier
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Pokušavam napraviti program u koji se upiše n broj - to je broj koliko će prirodnih brojeva manjih od 1 000 000 biti upisano
Tada se unosi tih n brojeva i od svakog broja je potrebno izdvojiti samo prvu znamenku.
Taj dio sam uspio isprogramirati i sad trebam izbrojati koliko ima jedinica, dvojki itd.
Probao sam za svaku znamenku napraviti varijablu te sa ifovima "izbrojati" koliko kojih ima, ali nikako ne radi...
Može li mi itko pomoći?
Evo ovaj dio koji radi :
int a;
scanf("%d", &a);
int niz[a - 1];
for(int i = 0; i < a; i++){
scanf("%d", &niz[i]);
while(niz[i] > 10){
niz[i] = niz[i] / 10;
}
}
Pokušavam napraviti program u koji se upiše n broj - to je broj koliko će prirodnih brojeva manjih od 1 000 000 biti upisano
Tada se unosi tih n brojeva i od svakog broja je potrebno izdvojiti samo prvu znamenku.
Taj dio sam uspio isprogramirati i sad trebam izbrojati koliko ima jedinica, dvojki itd.
Probao sam za svaku znamenku napraviti varijablu te sa ifovima "izbrojati" koliko kojih ima, ali nikako ne radi...
Može li mi itko pomoći?
Evo ovaj dio koji radi :
int a;
scanf("%d", &a);
int niz[a - 1];
for(int i = 0; i < a; i++){
scanf("%d", &niz[i]);
while(niz[i] > 10){
niz[i] = niz[i] / 10;
}
}
Evo sam ti sklepao cijelo rješenje.Svaki je pokušaj pozitivan korak pa tako i tvoj ali ti predlažem da se kod c++ kloniš c-like izvedbi.
Probaj forsirati klase gdje god ide (za vježbu) jer ovo napisano iako je validan c++ , nije ono kako bi to trebalo činiti.
Nisam ništa iskomentirao namjerno tako da malo prođeš code-om i sam pohvataš bit.
Ako ne bude niti tada jasno , postaj pa ako sutra budem online , postam ti komentare.
Naravno , isto vrijedi i ako naiđeš na neki fail u kodu.
Pozdrav i ugodna vježba.
/**
neovisno o temi :
Moj prijatelj editor(?!?!*# arghhhh) je danas bio dosta neprijateljski raspoložen tako da sam već iz valjda 12-tog puta uspio postati code + text + link a da ne javlja kakav hostile komadić slova.Kad bi to išlo iz prve , svakako bi bio ugodnije pisati komentare.
**/
#include <iostream>
#include <vector>
#include <sstream>
#include <cstdlib>
typedef unsigned int uint32;
using namespace std;
class Processor
{
public:
Processor();
void collectData();
protected:
void processData();
void report(vector < uint32 > &dataForReport);
string toString(int number);
private:
vector < uint32 > m_data;
uint32 m_n;
};
Processor::Processor()
{
cout << "unesi broj n : ";
cin >> m_n;
cout << endl;
}
void Processor::collectData()
{
uint32 temp;
while (m_n > 0)
{
cout << "molim upis broja : ";
cin >> temp;
m_data.push_back(temp);
cout << endl;
m_n--;
}
processData();
}
string Processor::toString(int number)
{
stringstream ss;
ss << number;
return ss.str();
}
void Processor::processData()
{
vector < uint32 > tempVec(10, 0);
for (uint32 i = 0; i < m_data.size(); i++)
{
uint32 temp;
string str;
str += toString(m_data[i])[0];
temp = atoi( str.c_str() );
tempVec[temp]++;
}
report(tempVec);
}
void Processor::report(vector < uint32 > &dataForReport)
{
for (uint32 i = 0; i < dataForReport.size(); i++)
{
cout << "broj " << i << " se pojavljuje " << dataForReport[i] <<
" puta\n";
}
}
int main()
{
Processor proc;
proc.collectData();
return 0;
}
Ja bi kao prostornu složenost uzeo niz[9], odnosno samo onoliko koliko je nužno za zabilježiti znamenke, a mogu uzeti niz od 9 polja jer traže prirodne brojeve.
#include <iostream>
using namespace std;
int main()
{
int n, broj;
int niz[9] = {0};
cin>> n;
for(int i = 0; i < n; i++)
{
cin>> broj;
while(broj > 9)
broj /= 10;
niz[broj - 1]++; // znamenku 1 - 9 uzimamo kao index niza 0 - 8, a niz sluzi kao brojac
}
for(int i = 0; i < 9; i++)
cout<< i + 1 << " : " << niz[i] << endl;
return 0;
}
Pozdrav svima!
Trebao bih pomoć oko jednog zadatka za c++. Zadatak glasi ovako:
Napisati funkciju koja će u zadanom znakovnom nizu obaviti zamjenu svih pojavljivanja zadanog znaka znakom * i vratiti broj znakova koji su ostali nepromijenjeni. Prototip funkcije je: int zamijeni(char *str, char znak).
Ja sam pokušao ovako:
Pozdrav svima!
Trebao bih pomoć oko jednog zadatka za c++. Zadatak glasi ovako:
Napisati funkciju koja će u zadanom znakovnom nizu obaviti zamjenu svih pojavljivanja zadanog znaka znakom * i vratiti broj znakova koji su ostali nepromijenjeni. Prototip funkcije je: int zamijeni(char *str, char znak).
Ja sam pokušao ovako:
Evo i sređena verzija:
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
int zamijeni(char *str, char znak)
{
int i=0, broj=0;
do
{
if (str[i]==(znak))
{
str[i]='*';
}
else
{
broj++;
}
i++;
}
while (str[i]!='\0');
return broj;
}
int main()
{
char str[40+1];
char znak = 'i';
int broj;
cout<<"Unesi znakovni niz: "<<endl;
cin.getline(str, 40);
cout<<endl;
broj=zamijeni(str, znak);
cout<<str<<endl;
cout<<"broj nepromijenjenih znakova je: "<<broj<<endl;
system("PAUSE");
return 0;
}
Ova verzija pod nepromijenjene znakove ubraja i razmake što je, strogo gledano, točno ponašanje. Bi li znao preurediti kod tako da ne broji razmake?
Baš sam mu i ja napisao, pa ću staviti, malo je različit.
Nema else grane, nego broj nepromjenjenih dobijamo da od ukupnih oduzmemo broj promjenjenih, inače nije mi se dalo ispravljati te sitne greškice kod njega, pa nek proanalizira gdje mu ne štima.
edit: petlja je dovoljna i ovako
#include <iostream>
using namespace std;
int zamjeni(char* str, char znak)
{
int broj = 0, i;
for(i = 0; str[i]; i++)
{
if(str[i] == znak)
{
str[i] = '*';
broj++;
}
}
return i - broj;
}
int main()
{
char niz[50];
char znak;
cin>> znak;
cin.ignore();
cin.getline(niz, 50);
cout<< zamjeni(niz, znak) << endl;
return 0;
}
Tamo je bilo napisano &str[20] . Zar to neće poslati adresu 21. člana polja i time praktički preskočiti prvih 20 znakova?
Tamo je bilo napisano &str[20] . Zar to neće poslati adresu 21. člana polja i time praktički preskočiti prvih 20 znakova?
Ups, previdio...
1. Zašto "znak-1"? To onda više nije znak koji tražiš nego znak koji se nalazi ispred njega u ASCII tablici
Krivo sam protumačio stvari. Sada mi je jasno
2.zašto si znak deklarirao kao polje? Dovoljan ti je jedan znak.
Očito da nisam znao razliku između polja i jednog znaka.
3. cin ne čita stringove koji sadrže razmake (staje na prvom razmaku na kojeg naiđe jer razmak tretira kao delimiter), trebaš 'getline' kako bi neometano pročitao kompletnu liniju teksta.
Nisam to znao. Tek sada shvaćam razliku.
4. Šalješ polje od 21-og znaka nadalje, što je pogrešno jer preskaćeš prvih 20 znakova.
Ovo ne kužim. Na koji način šaljem polje 21-og znaka. stavio sam zamijeni(&str[20],znak[2]); zato sto mi c++ program izbaci error ako drugacije napisem. Vjerojatno zbog toga sto sam koristio 'cin>>' umjesto 'getline'
Zašto si stavio:
char str[40+1];
Zašto to +1?
Bi li znao preurediti kod tako da ne broji razmake?
Evo uradio sam to ovako:
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
int zamijeni(char *str, char znak)
{
int i=0, broj=0,razmak=0;
do
{
if (str[i]==(znak))
{
str[i]='*';
}
else if (str[i]==(' '))
{
razmak++;
}
else
{
broj++;
}
i++;
}
while (str[i]!='\0');
return broj;
}
int main()
{
char str[40+1];
char znak = 'i';
int broj;
cout<<"Unesi znakovni niz: "<<endl;
cin.getline(str, 40);
cout<<endl;
broj=zamijeni(str, znak);
cout<<str<<endl;
cout<<"broj nepromijenjenih znakova je: "<<broj<<endl;
system("PAUSE");
return 0;
}
char str[40+1];
Zašto to +1?
40 bajtova za znakove + 1 za null terminator. Dok čitam kod lakše mi je primijetiti da sam ostavio jedno dodatno mjesto za null znak (tj da sam razmišljao o pravilnom rezerviranju potrebnog mjesta) kada to tako napišem, a nema baš nikakav utjecaj na izvođenje koda jer kompajler sve moguće izraze sa konstantama riješi pri kompajliranju.
int zamijeni(char *str, char znak)
{
int i=0, broj=0,razmak=0;
do
{
if (str[i]==(znak))
{
str[i]='*';
}
else if (str[i]==(' '))
{
razmak++;
}
else
{
broj++;
}
i++;
}
while (str[i]!='\0');
return broj;
}
Tu ti samo brojiš razmake i ništa ne radiš s time. Mogao si na kraju od sveukupnog broja prebrojanih znakova oduzeti broj razmaka, ili si mogao srediti kod da uopće ni ne broji razmake. Ovako:
int zamijeni(char *str, char znak)
{
int i=0, broj=0;
do
{
if (str[i]==znak)
{
str[i]='*';
}
else if (str[i]!=' ')
{
broj++;
}
i++;
}
while (str[i]!='\0');
return broj;
}
btw. zašto si varijablu 'znak' i znak za razmak (' ') strpao u zagrade?
Gledaj matematicki - ako razmake ne brojis, pribrojs ih izmjenjenim i oduzmes od ukupnih.
int zamjeni(char* str, char znak)
{
int broj = 0, i;
for(i = 0; str[i]; i++)
{
if(str[i] == znak || str[i] == ' ')
{
broj++;
if(str[i] != ' ') str[i] = '*';
}
}
return i - broj;
}
Znači može se ostaviti ovako.
else if (str[i]!=' ')
Mogao si na kraju od sveukupnog broja prebrojanih znakova oduzeti broj razmaka
Znam, uradio sam to, kužim to za razmake.
40 bajtova za znakove + 1 za null terminator.
Da sam stavio char str[40]; bilo bi rezervirano 39 bajtova za znakove + 1 za \0. Ja sam uvijek mislio kad stavim char str[40]; da mi se rezervira 40 bajtova za znakove a taj null terminator da se to samo doda kao 41. bajt.
btw. zašto si varijablu 'znak' i znak za razmak (' ') strpao u zagrade?
radi i bez i sa zagradama, nisam uočio zato što sam jednostavno kopirao predhodni uvjet i promijenio znak, nisam se obazirao na tu zagradu.
Znači može se ostaviti ovako.
else if (str[i]!=' ')
Da. No nemoj me krivo shvatiti, nije to jedini način.
Da sam stavio char str[40]; bilo bi rezervirano 39 bajtova za znakove + 1 za \0. Ja sam uvijek mislio kad stavim char str[40]; da mi se rezervira 40 bajtova za znakove a taj null terminator da se to samo doda kao 41. bajt.
Pa i rezervira ti se 40 bajtova za znakove. Ali je i '\0' također znak, te i o njemu moraš voditi računa. Moraš znati da su svi C stringovi uvijek dulji za jedan znak jer moraju završavati null terminatorom. Kada ti tako alociraš memoriju za polje, moraš ju alocirati za sve članove polja. Znači da string "ivica i marica" ne koristi 14 bajta memorije nego 15. Iako ti taj null terminator nikada ne vidiš on je prisutan i moraš paziti da i za njega ima mjesta.
Znam da radi, pitao sam zašto si to napravio. Pomislio sam da možda ne znaš da zagrade nisu potrebne.
U svakom slučaju hvala. Skužio sam ovaj zadatak. Ima tu još stvari što mi nisu jasne kao npr. dinamičko alociranje prostora (malloc realloc itd...). Znači kao početniku bi volio da mi se objasni da skužim i to, jer mi to profesori nisu detaljno objasnili ali zahtijevaju.
U svakom slučaju hvala. Skužio sam ovaj zadatak. Ima tu još stvari što mi nisu jasne kao npr. dinamičko alociranje prostora (malloc realloc itd...). Znači kao početniku bi volio da mi se objasni da skužim i to, jer mi to profesori nisu detaljno objasnili ali zahtijevaju.
To je C-ovska alokacija, radije koristi new[] i delete[] operatore za nizove (obični new i delete su single-object alokatori).
Želiš reći da sve te malloc i realloc zamjenjuje new[] i delete[]?
Kao npr. ovaj zadatak?:
#include <iostream>
#define N 10
using namespace std;
int main()
{
char *znak;
int i = 0,pa=0;
bool F1 = false, F2 = false;
znak = new char[N];
cout << "Unesi znakove:" << endl;
do
{
fflush(stdin);
cin >> (znak + i);
if((*(znak + i) >= '0') && (*(znak + i) <= '9'))
{
F1 = true;
}
if ((*(znak + i) == 'a')) pa=pa+1;
i++;
if(i == N)
{
F2 = true;
}
}
while (!F1 && !F2);
if(F1)
{
cout << "Unesena je znamenka." << endl;
}
if(F2)
{
cout << "Popunjen je memorijski prostor." << endl;
}
delete [] znak;
cout<<"Znak a je unesen "<<pa<<" puta."<<endl;
// kraj programa
return 0;
}