Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.285
|
čitano: 1.712.304
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
191x7 kaže...

Moj problem nitko ništa?

Ubuntu 12.04 LTS, Qt Creator, gcc kompajler, najnormalnije radi.

Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
13 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
191x7 kaže...

Moj problem nitko ništa?

Probao sam i ja, normalno se kompajlira i pokreće.

Linux Mint 15, NetBeans, g++

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
191x7 kaže...
Dev-C++ ga kao kompajlira i sve ok, no ne želi ga pokrenuti, kada treba kaže do source nije kompajliran.

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

 

191x7 kaže...
Kako da to čudo natjeram da exe radi i na drugim kompovima? Hvala.

Jesi siguran da ne radi? Nisi ga ni pokušao pokrenuti 'izvana' nego samo kroz DevCpp.

What Andy giveth, Bill taketh away.
Poruka je uređivana zadnji put uto 25.6.2013 23:05 (rustweaver).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Ovako imam problem ja sam napisao program u visual c++ 2008 expressu pomocu windows forma e sad problem je sto meni radi a frendu (probo sam compile sa .net frameworkom 2.0,3.0 i 3.5 ali ni jedan ne radi). Trebam pomoc hitno.
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
1domagoj1 kaže...
191x7 kaže...

Moj problem nitko ništa?

Ubuntu 12.04 LTS, Qt Creator, gcc kompajler, najnormalnije radi.

pr0n_addict kaže...

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.

rustweaver kaže...
191x7 kaže...
Dev-C++ ga kao kompajlira i sve ok, no ne želi ga pokrenuti, kada treba kaže do source nije kompajliran.

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

 

191x7 kaže...
Kako da to čudo natjeram da exe radi i na drugim kompovima? Hvala.

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.

Twitter: @191x7
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Nema smisla, pa ne koristis apsolutno nikakve specijalne library-e, samo ti je iostream ukljucen. Prebacim ovaj svoj ELF i na drugu distru na laptopu, radi.

Moze biti da devcpp na neki nacin nije kompatibilan s Win 8 jer je prastar komad softvera, ali ne znam da je bas do toga. Mozes probat s drugim IDE-om, skini Code::Blocks, ali onaj s MinGW-om pa probaj.
Perhaps today IS a good day to die. PREPARE FOR RAMMING SPEED!
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

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:

http://www.mediafire.com/?wjmqymc0zctfjaf

Twitter: @191x7
Poruka je uređivana zadnji put sri 26.6.2013 1:01 (191x7).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
191x7 kaže...
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.

A što piše u compile logu?

 

compile log tab compile log tab
What Andy giveth, Bill taketh away.
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
191x7 kaže...
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.

A što piše u compile logu?

 

Bude prazan ak ose ne varam.

Twitter: @191x7
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
191x7 kaže...

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

What Andy giveth, Bill taketh away.
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...
191x7 kaže...

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

Twitter: @191x7
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

DevCpp.. alat u kojemu vječito treba nešto podešavati.

Kada lajavci laju onda završe ovako: http://i471.photobucket.com/albums/rr77/toropreto/2012-07-0813_30_07.gif
Moj PC  
3 1 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
191x7 kaže...
...

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. {#}

What Andy giveth, Bill taketh away.
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

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

Pocetnik sam sto se tice ovog imam jako malo iskustva sa C om ali je to ono osnovno.
Vjerojatno neka glupa greska, hvala.
 
0 0 hvala 0
13 godina
offline
Programiranje u C++-u - pitanja i odgovori

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;

     }

   }

[url]http://exclusiveapplications.blogspot.com/[/url]
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
bed-boy11 kaže...

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.

 

www.http://ideone.com/1QWi3g

 

/**

 

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;
}

 

 

http:/https://play.google.com/store/apps/details?id=org.kde.necessitas.example.SMASHHH
Poruka je uređivana zadnji put uto 2.7.2013 23:28 (nik_02).
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

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;
}
 

 

 

 

 

 
0 0 hvala 0
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

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:

#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
int zamijeni(char *str, char znak) {
int i=0,broj;
do {
if (str[i]==(znak-1)) {str[i]='*';}
i++;
}
while(str[i]!='\0');
return *str;
}
int main()
{
char str[20];
char znak[] = "a";
int broj;
cout<<"Unesi znakovni niz:"<<endl;
cin>>str;
cout<<endl;
zamijeni(&str[20],znak[2]);
cout<<str;
   system("PAUSE");
   return 0;
}
Zadatak nije dobar pa vas molim da me ispravite i da mi objasnite u čemu je problem.
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
super_nova kaže...

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:

#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
int zamijeni(char *str, char znak) {
int i=0,broj;
do {
if (str[i]==(znak-1)) {str[i]='*';}
i++;
}
while(str[i]!='\0');
return *str;
}
int main()
{
char str[20];
char znak[] = "a";
int broj;
cout<<"Unesi znakovni niz:"<<endl;
cin>>str;
cout<<endl;
zamijeni(&str[20],znak[2]);
cout<<str;
   system("PAUSE");
   return 0;
}
Zadatak nije dobar pa vas molim da me ispravite i da mi objasnite u čemu je problem.

 

  1. Zašto "znak-1"? To onda više nije znak koji tražiš nego znak koji se nalazi ispred njega u ASCII tablici
  2. zašto si znak deklarirao kao polje? Dovoljan ti je jedan znak.
  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.
  4. Šalješ polje od 21-og znaka nadalje, što je pogrešno jer preskaćeš prvih 20 znakova.
  5. Ne samo da si nepotrebno deklarirao znak kao polje, nego si još i pogrešan indeks elementa proslijedio funkciji, tu bi trebalo ići "znak[0]" jer se prvi element polja nalazi pod nultim indeksom.

 

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?

What Andy giveth, Bill taketh away.
Poruka je uređivana zadnji put sri 10.7.2013 16:14 (rustweaver).
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

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;
}
 

Poruka je uređivana zadnji put sri 10.7.2013 16:36 (Floki).
 
2 0 hvala 0
15 godina
online
Re: Programiranje u C++-u - pitanja i odgovori
rustweaver kaže...

  1. Nepotrebno je eksplicitno dohvaćati adresu polja pomoću '&' operatora budući da polje već samo po sebi i jest referenca na memorijsku adresu svojih članova (nije ni pogrešno to što si napravio. Rezultat je isti sa i bez '&' operatora, samo je suvišno)

Tamo je bilo napisano &str[20] . Zar to neće poslati adresu 21. člana polja i time praktički preskočiti prvih 20 znakova?

Poruka je uređivana zadnji put sri 10.7.2013 16:43 (captain_soap_McTawish).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
captain_soap_McTawish kaže...

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

What Andy giveth, Bill taketh away.
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

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;

}

 

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
super_nova kaže...
Zašto si stavio:

 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.

 

super_nova kaže...
Evo uradio sam to ovako:

 

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?

What Andy giveth, Bill taketh away.
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

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;
}

 

Poruka je uređivana zadnji put sri 10.7.2013 18:35 (Floki).
 
0 0 hvala 0
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

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.

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
super_nova kaže...

Znači može se ostaviti ovako.

else if (str[i]!=' ')

Da. No nemoj me krivo shvatiti, nije to jedini način.

 

super_nova kaže...
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.

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.

 

super_nova kaže...
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.

Znam da radi, pitao sam zašto si to napravio. Pomislio sam da možda ne znaš da zagrade nisu potrebne.

What Andy giveth, Bill taketh away.
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

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. {#}

 
0 0 hvala 0
13 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
super_nova kaže...

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

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put sri 10.7.2013 22:13 (pr0n_addict).
12 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Ž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;

}

 
0 0 hvala 0
E-mail:
Lozinka:
 
vrh stranice