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

poruka: 7.285
|
čitano: 1.724.380
|
moderatori: XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

ovo je dio programa pa zato izgleda besmisleno

#include<iostream>

using namespace std;

int a[10],k,i;

int main(){

   k=0;

   for(i=1;i<=10; i++){cin>>a[i];}

   cout<<k<<endl;

   system("Pause");

   return 0;

}

 

kad unesem 10 brojeva program ispise zadnji uneseni broj umjesto "0", zna li netko zasto?

14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Pa program ti ispisuje 0.

 

EDIT: Ali ne kužim, zašto će ti tu for petlja kojom unosiš vrijednosti u neko polje, a trebaš ispisati broj k, koji nema veze s tom petljom

Poruka je uređivana zadnji put sub 19.11.2011 15:14 (B3Arf00t).
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
srky.du kaže...

ovo je dio programa pa zato izgleda besmisleno

 

#include<iostream>

using namespace std;

int a[10],k,i;

int main(){

   k=0;

   for(i=1;i<=10; i++){cin>>a[i];}

   cout<<k<<endl;

   system("Pause");

   return 0;

}

 

 

kad unesem 10 brojeva program ispise zadnji uneseni broj umjesto "0", zna li netko zasto?

Polje a si deklarirao kao a[10], znači elementi to polja su a[0]..a[9]. Tebi petlja ide od 1 do 10, znači upisuješ u polje vrijednosti za elemente od a[1]..a[10]. Je li to u redu?

15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

jest, hvala
i samo da pitam, da li je moguće kreirati niz npr a[-10]..a[10] ili a['a']..a['z']? 

17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
srky.du kaže...

jest, hvala
i samo da pitam, da li je moguće kreirati niz npr a[-10]..a[10] ili a['a']..a['z']? 

Ne. PHP podržava string indekse, nisam siguran da podržava negativne, no C/C++ podržavaju samo indeks 0 i prirodne brojeve.

 

Pazi - negativni indeksi ti zapravo ni ne trebaju. Ako misliš da ti trebaju indeksi od -10 do 10, jednostavno broj koji bi koristio za indeks uvijek uvećaj za 10, pa ćeš imati od 0 do 20.

15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
mbaksa kaže...
srky.du kaže...

jest, hvala
i samo da pitam, da li je moguće kreirati niz npr a[-10]..a[10] ili a['a']..a['z']? 

Ne. PHP podržava string indekse, nisam siguran da podržava negativne, no C/C++ podržavaju samo indeks 0 i prirodne brojeve.

 

Pazi - negativni indeksi ti zapravo ni ne trebaju. Ako misliš da ti trebaju indeksi od -10 do 10, jednostavno broj koji bi koristio za indeks uvijek uvećaj za 10, pa ćeš imati od 0 do 20.

Sad sam probo i mogu koristiti 'a' i 'z' kao indekse je su tipa char, a ne string. a['a'] je isti član niza kao i a[97]

Nedavno sam preso s pascala na cpp, a u pascalu sam mogo imat negativne indekse

17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
srky.du kaže...
mbaksa kaže...
srky.du kaže...

jest, hvala
i samo da pitam, da li je moguće kreirati niz npr a[-10]..a[10] ili a['a']..a['z']? 

Ne. PHP podržava string indekse, nisam siguran da podržava negativne, no C/C++ podržavaju samo indeks 0 i prirodne brojeve.

 

Pazi - negativni indeksi ti zapravo ni ne trebaju. Ako misliš da ti trebaju indeksi od -10 do 10, jednostavno broj koji bi koristio za indeks uvijek uvećaj za 10, pa ćeš imati od 0 do 20.

Sad sam probo i mogu koristiti 'a' i 'z' kao indekse je su tipa char, a ne string. a['a'] je isti član niza kao i a[97]

Nedavno sam preso s pascala na cpp, a u pascalu sam mogo imat negativne indekse

Da, krivo sam te skužio. Da, možeš koristiti charove, jer charovi nisu ništa drugo doli 8-bitni broj (pazi - od -128 do 127 ako koristiš samo char, ako hoćeš vrijednosti od 0 do 255, onda moraš staviti unsigned char), koji se kad je unutar null-terminated "stringa" prezentiraju kao ASCII znakovi, a ne kao brojevi. Međutim, baš i ne vidim neku praktičnu korist toga (osim ako recimo ne provjeravaš učestalost pojave pojedinih znakova - onda to može super poslužiti). S druge strane, stringovi kao indeksi mogu biti iznimno korisni - samo je šteta što ih C/C++ ne podržava.

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

Da, krivo sam te skužio. Da, možeš koristiti charove, jer charovi nisu ništa drugo doli 8-bitni broj (pazi - od -128 do 127 ako koristiš samo char, ako hoćeš vrijednosti od 0 do 255, onda moraš staviti unsigned char), koji se kad je unutar null-terminated "stringa" prezentiraju kao ASCII znakovi, a ne kao brojevi. Međutim, baš i ne vidim neku praktičnu korist toga (osim ako recimo ne provjeravaš učestalost pojave pojedinih znakova - onda to može super poslužiti). S druge strane, stringovi kao indeksi mogu biti iznimno korisni - samo je šteta što ih C/C++ ne podržava.

char sam koristio kao indeks(u pascalu) kod rijesavanja zadatka "Zastave

13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
mbaksa kaže...

S druge strane, stringovi kao indeksi mogu biti iznimno korisni - samo je šteta što ih C/C++ ne podržava.

Možda će ih biti u C++0X.

Programming is understanding. – Kristen Nygaard
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...
mbaksa kaže...

S druge strane, stringovi kao indeksi mogu biti iznimno korisni - samo je šteta što ih C/C++ ne podržava.

Možda će ih biti u C++0X.

Obicna polja (array) nisu predvidena da podrzavaju stringove kao kljuc/indeks niti ce ikad podrzavati.

Ako zelite stringove ili nesto drugo kao indeks koristis mape tj. asocijativna polja:

http://tinyurl.com/3mgklrd

All religions are the same: religion is basically guilt, with different holidays.
Poruka je uređivana zadnji put sub 19.11.2011 19:30 (drnde).
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...
mbaksa kaže...

S druge strane, stringovi kao indeksi mogu biti iznimno korisni - samo je šteta što ih C/C++ ne podržava.

Možda će ih biti u C++0X.

Možeš koristiti indekse string varijable, zašto ne, ako su indeksi prirodni brojevi skupa s 0, druga stvar je nepromjenjivost string niza, ali i to je uvjetno, jer ne možeš direktno mjenjati pozicije u string nizu kao u char nizu, ali za to postoje metodi u string klasi poput insert(), replace(), swap().

U ovom konteksu string nizovi podržavaju indekse, čak možemo dobiti ascii vrijednost pojedinog znaka u string nizu int castom.

Ovo je naravno, samo proširenje onog što je rekao @mbaksa, ne postoje indeksi char znakovi u c/c++.

 

 


#include<iostream>
#include<string>
using namespace std;

int main ()
{
    string recenica = "bug forum", obrnuto = "";
    char charNiz[10] = "admio";
    for(int i = recenica.length()-1; i >= 0; i--)
    {
       obrnuto += recenica[i];
    }
    cout << recenica << endl << obrnuto << endl << (int)recenica[0] << endl;
    return 0;
}

Poruka je uređivana zadnji put ned 20.11.2011 13:46 (Floki).
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...
royalhero kaže...
mbaksa kaže...

S druge strane, stringovi kao indeksi mogu biti iznimno korisni - samo je šteta što ih C/C++ ne podržava.

Možda će ih biti u C++0X.

Možeš koristiti indekse string varijable, zašto ne, ako su indeksi prirodni brojevi skupa s 0

Krivo si skužio što govorim - govorim o cout << temperatura["sijecanj"]; - tako nešto je moguće u PHP-u, no ne i u C/C++-u - tj. nije moguće nad poljima, ali kao što je drnde napisao, moguće je kad se koristi predložak klase map u C++-u (ne znam ima li ekvivalent u C-u).

17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Vidio sam poslije na što se mislilo, ispričavam se.

Ali, ispravi me ako griješim, u c++ i c# nema potrebe tako postavljati nizove da primaju string indekse, ima dovoljno druge aparature, npr. klase i list<T>.

Slično i u C++, samo umjesto svojstava getteri i setteri.

Lista objekata klase koji imaju indekse od 0-N, a preko indeksa dobijamo objekt iz kojeg očitavamo svojstvo koje hoćemo.

 

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication11
{
    class GodisnjeTemperature
    {
        public double Temperatura
        {
            get;
            set;
        }
        public string Mjesec
        {
            get;
            set;
        }
    }
    class Program
    {

    
        static void Main(string[] args)
        {
            List<GodisnjeTemperature> temperatura = new List<GodisnjeTemperature>();
            Console.WriteLine("Unos po mjesecima: ");
            for (int i = 0; i < 12; i++)
            {
                Console.WriteLine("{0}. mjesec: ", i + 1);
                GodisnjeTemperature mjesec = new GodisnjeTemperature();
                temperatura.Add(mjesec);
                Console.Write("naziv mjeseca: ");
                mjesec.Mjesec = Console.ReadLine();
                Console.Write("prosječna temperatura: ");
                mjesec.Temperatura = double.Parse(Console.ReadLine());
            }
            Console.WriteLine(temperatura[3].Mjesec + ": " + temperatura[3].Temperatura);
           
        }
    }
}

Poruka je uređivana zadnji put ned 20.11.2011 20:30 (Floki).
 
0 0 hvala 0
17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

Vidio sam poslije na što se mislilo, ispričavam se.

Ali, ispravi me ako griješim, u c++ i c# nema potrebe tako postavljati nizove da primaju string indekse, ima dovoljno druge aparature, npr. klase i list<T>.

Slično i u C++, samo umjesto svojstava getteri i setteri.

Lista objekata klase koji imaju indekse od 0-N, a preko indeksa dobijamo objekt iz kojeg očitavamo svojstvo koje hoćemo.

Nekako mi se čini da ne shvaćaš o čemu govorimo. Ovaj tvoj primjer s predloškom klase list bismo mogli povezati s map-om ili s stringom kao indeksom u PHP-u samo ako bi još napisao i funkciju koja će vratiti vrijednost za određeni string-indeks. Znači, kao parametar funkciji bi poslao "sijecanj", a ona bi ti vratila recimo broj 5 (ili bi vratio null ili bi došlo do iznimke ako još nema upisanog tog mjeseca).

 

Poruka je uređivana zadnji put ned 20.11.2011 20:49 (mbaksa).
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication11
{
    class GodisnjeTemperature
    {
        public double Temperatura
        {
            get;
            set;
        }
        public string Mjesec
        {
            get;
            set;
        }
    }
    class Program
    {
        static List<GodisnjeTemperature> temperatura = new List<GodisnjeTemperature>();

        static double Temperatura(string mjesec)
        {
            for (int i = 0; i < temperatura.Count; i++)
            {
                if (mjesec.CompareTo(temperatura[i].Mjesec) == 0)
                {
                    return temperatura[i].Temperatura;
                }
            }
            return 0;
        }

        static void Main(string[] args)
        {
          
            Console.WriteLine("Unos po mjesecima: ");
            for (int i = 0; i < 12; i++)
            {
                Console.WriteLine("{0}. mjesec: ", i + 1);
                GodisnjeTemperature mjesec = new GodisnjeTemperature();
                temperatura.Add(mjesec);
                Console.Write("naziv mjeseca: ");
                mjesec.Mjesec = Console.ReadLine();
                Console.Write("prosječna temperatura: ");
                mjesec.Temperatura = double.Parse(Console.ReadLine());
            }
            Console.WriteLine(temperatura[3].Mjesec + ": " + temperatura[3].Temperatura);
            Console.WriteLine(Temperatura("travanj"));

        }
    }
}

Poruka je uređivana zadnji put ned 20.11.2011 21:58 (Floki).
 
0 0 hvala 0
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Na isti način ide i funkcija static string Mjesec(double temperatura);

koja vraća ili ime mjeseca sa tom temperaturom ili prazan string.

Poruka je uređivana zadnji put ned 20.11.2011 22:52 (Floki).
 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

static double Temperatura(string mjesec)
        {
            for (int i = 0; i < temperatura.Count; i++)
            {
                if (mjesec.CompareTo(temperatura[i].Mjesec) == 0)
                {
                    return temperatura[i].Temperatura;
                }
            }
            return 0;
        }

To je C#, a ne C++. Ako koristiš .NET 3.5 ili više piši:

static double Temperatura(string mjesec)

{

var tempmj = temperatura.FirstOrDefault(item => item.Mjesec == mjesec);

if (tempj != null)

return tempj.Temperatura;

return 0;

}

 

Ili jednostavno koristi Dictionary<string, double>.

Poruka je uređivana zadnji put pon 21.11.2011 9:35 (programabilan).
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

To je metod FirstOrDefault() iz Linq-a i Lambda izraz što si stavio.

Pa znam da sam pisao kod u C# (nisam baš tako munjen da to ne znam)

Lijepo sam naglasio da se kod koji sam ja napisao od C++ razlikuje samo u tome što se umjesto gettera i settera koriste svojstva.

Uglavnom, poanta je u tome da će teško developerima i C++ i C# sada pasti na pamet uvoditi nizove koji primaju string indekse, pošto je 

druge aparature kolko hoćeš.

Poruka je uređivana zadnji put pon 21.11.2011 12:30 (Floki).
 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
OK, jasno mi je to da postoji druga infrastruktura, samo ukazujem da ne širiš tako nepraktičan kod ;) Koristi Dictionary, a ne List sa pretragom.

Ne slažem se pak s komentarom da svojstva umanjuju potrebu za asocijativnim poljima, to su kruške i jabuke. Asocijativna polja (map, Dictionary) su fundamentalno drukčiji konstrukti od polja. Makar nisi u krivu, nisi niti u pravu jer nije relevantno.
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Nisam ja rekao da svojstva umanjuju potrebu za asocijativnim poljima

nego sam rekao da postojanje asocijativnih polja otklanja potrebu da obični nizovi u c++ i c# dobiju mogućnosti onih iz php-a

čitaj što sam rekao, ovo ti je bilo "u ništa"

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

Program za racunanje sume brojeva u intervalu od k do p...

 

Sta ovdje ne valja?

 

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
Poruka je uređivana zadnji put sri 23.11.2011 8:03 (Intelovac123).
 
0 0 hvala 0
16 godina
online
Re: Programiranje u C++-u - pitanja i odgovori
Intelovac123 kaže...

Program za racunanje sume brojeva u intervalu od k do p...

 

Sta ovdje ne valja?

 

Na prvi pogled, nisi inicijalizirao varijablu i, i z. Petlja se sigurno ponasa lose

Lack of money is the root of all evil. George Bernard Shaw
Poruka je uređivana zadnji put sri 23.11.2011 8:08 (CalvinRi).
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Jesam pogledaj kod...

 

Samo recite sta ne valja.

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Intelovac123 kaže...

Jesam pogledaj kod...

 

Samo recite sta ne valja.

 

Nisi, naime ti si ih deklarirao, ali ne i incijalizirao, u pravilu neinicijalizirana varijabla pokupi smeće sa adresnog mjesta gdje se instancira tako da se na to ne možeš osloniti.

 

EDIT:

Ima još jedna greška , naime u for petlji postavljaš prvi argument , toćnije uvjet i>=k ??? to ne valja, jer na tom mjestu ne ide uspoređivanje već inicijalizacija, to je recimo jedna veća greška. stavi prvi argument for petlje i=k;

Poruka je uređivana zadnji put sri 23.11.2011 9:38 (woodgamesfx).
15 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Mozes ti onda napisat kod koji valja?

http://www.bug.hr/forum/topic/softver-literatura-usluge/prodaja-knjige-hardware/103166.aspx
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Intelovac123 kaže...

Mozes ti onda napisat kod koji valja?

 

Kažem ti što izmjeni, a pošto si ovo screenshotao neda mi se sve prepisavat.

Znaći u for petlji promjeni uvjet u iskaz, znaći umjesto i>=k stavi i=k i petlja mora radit. S time da z postavi na neku vrijednost prije petlje, možeš postaviti na 0 ili na vrijednot varijable k nakon unosa, ovisi što te zanima.

17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Za izraz z = z + i compiler će javiti grešku ako varijabla nije inicijalizirana, on će spriječiti da se koristi nekakva zaostala vrijednost koja se nalazi na toj adresi varijable.

 

@Intelovac, koliko se sjećam već te netko upozorio da koristiš operator  z += i (addition assignment) umjesto izraza z = z + i.

Poruka je uređivana zadnji put sri 23.11.2011 13:01 (Floki).
 
1 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Moraš postaviti početne vrijednosti varijablama koje ćeš inkrementirati.
Ako varijabli nije dodjeljena početna vrijednost, ona sadržava svoju adresu u memoriji.
Znači:

#include<iostream>

#include<cstdlib>

using namespace std;int main()

{

  int  k, z=0, p;

  cout<<"Unesite k!"<<endl;

  cin>>k;

  cout<<"Unesite p!"<<endl;

  cin>>p;

  for(int i=k; i<=p; i++)

  {

     z+=i;

  }

  cout<<"Zbir brojeva od "<<k<<" do "<<p<<" je "<<z<<endl;

  system("PAUSE");

  return 0;

}


Ovo je zadnji put da ti pišem kod!

 

Programming is understanding. – Kristen Nygaard
Poruka je uređivana zadnji put sri 23.11.2011 14:58 (royalhero).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
royalhero kaže...

Moraš postaviti početne vrijednosti varijablama koje ćeš inkrementirati.
Ako varijabli nije dodjeljena početna vrijednost, ona sadržava svoju adresu u memoriji.
Znači:

#include<iostream>

#include<cstdlib>

using namespace std;int main()

{

  int  k, z=0, p;

  cout<<"Unesite k!"<<endl;

  cin>>k;

  cout<<"Unesite p!"<<endl;

  cin>>p;

  for(int i>=k; i<=p; i++)

  {

     z+=i;

  }

  cout<<"Zbir brojeva od "<<k<<" do "<<p<<" je "<<z<<endl;

  system("PAUSE");

  return 0;

}


Ovo je zadnji put da ti pišem kod!

 

 

Na koju foru će ovo radit ????

for(int i>=k; i<=p; i++)

13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
woodgamesfx kaže...
Na koju foru će ovo radit ????

for(int i>=k; i<=p; i++)

Hvala što si primjetio!, eto popravio sam.

Programming is understanding. – Kristen Nygaard
Poruka je uređivana zadnji put sri 23.11.2011 14:58 (royalhero).
E-mail:
Lozinka:
 
vrh stranice