C++ kysymys

  • Keskustelun aloittaja Keskustelun aloittaja mtk77
  • Aloitettu Aloitettu
Liittynyt
17.4.2002
Viestejä
2 190
Ikä
47
Ongelma on seuraava. Pitää lukea kaksiulotteisen taulukon rivi ja sarakemäärä. Olen yrittänyt lukea ne muuttujiin ja sijoittanut muuttujat niiden sulkeiden sisään, tähän tapaan.

cout<<"Anna rivimaara: ";
cin>>rivi;
cout<<"Anna sarakemaara: ";
cin>>sarake;
int taulukko [rivi][sarake];

Tämä ei kuitenkaan kelpaa kääntäjälle. Tulee seuraava ilmoitus.

Constant expression required in function main()

Tarkoittaa varmaan, että pitäisi käyttää vakioita.

Onko ehdotuksia ratkaisuksi?
 
10% ALENNUS KOODILLA PAKKOTOISTO
Sinun täytyy luoda tuo taulukko dynaamisesti. Eli varaat rivi*sarake-määrän muistia. Javassa toimii tuo, että normi taulukon koon voi määrittää dynaamisesti.
 
Kuukkeliin vaan hakusanaksi vaikka Dynamic array niin pitäisi löytyä apuja.
 
c++:sta en osaa auttaa, mutta javalla tällä tapaa:
int [][] taulukko = new int[3][4] {4, 5, 32, 67} ,{54, 23, 77, 4},{23,234,2,65}
missä 3 ja 4 on rivit ja sarakkeet. eli voit laittaa ne muuttujina tohon.
new:tä ei muistaakseni c++:ssa ollu, mutta saattaa auttaa edes vähäsen tääkin :)
 
Kiitos neuvoista. Sain sen taulukon koon luvun näppäimistöltä toimimaan toivotulla tavalla, käyttäen dynaamista taulukkoa. Nyt olisi jatkokysymys. Kun se varattu muisti vapautetaan, niin miten voidaan varmistaa, että se todella vapautui, eikä tule mistivuotoa? Ohjelma on Borland C++ 4.52
 
Ei muuten kuin, että todella vapautat kaiken mitä varaat. Muistivuoto bugit eivät ole niitä helpoimpia selvittää.

Se miten noita voidaan testata on jättää softa pyörimään pitkäksi aikaa ja tarkkaillaan vapaan muistin määrää. Jos softassa on muistivuoto, niin vapaa muisti pitäisi pikkuhiljaa vähentyä.
 
Luin tätä threadia ja tuli muutama huomionarvoinen kohta vastaan, tässä vähän korjauksia/ehdotuksia:

ÄLÄ käytä malloc/free-paria muistin varaamiseen/vapauttamiseen C++:ssa. Tähän tarkoitukseen on kehitetty operaattoripari new/delete, jota siis tulee ehdottomasti käyttää normaalissa sovelluskehityksessä. Syitä:

1. malloc:lla muistia varattaessa se ei kutsu automaattisesti olion alustajafunktiota(constructor). Sama tapahtuu tuhoajafunktiolle(desctructor), kun free:llä vapautetaan muistia.
2. malloc() ei käsittele mitenkään muistin varaamisessa tapahtuvia ongelmia, joten sinun täytyy joka kerta tarkastaa sen palautusarvo. new heittää std::bad_alloc-poikkeuksen, mikäli muistin varaaminen ei onnistu.

Jos luot esimerkiksi kokonaislukutaulukon int *p = new int[10], muista vapauttaessasi muistia käyttää hakasulkuja deleten perässä (delete[] p). Muuten delete vapauttaa vain ensimmäisen arvon, ja loput taulukon alkioista jää edelleen varatuiksi (lue: muistivuoto).

Mikäli joskus tulet tekemään isompia projekteja, voisi jonkunlainen muistimanageri olla hyödyksi. Operaattorit new ja delete voidaan uudelleenmääritellä, joten voit pitää tarkasti kirjaa käytetystä ja vapautetusta muistista. Tämä helpottaa kummasti muistivuotojen selvittelyä.

Ps. Suosisin myös ehkä uusimaan kääntäjän, Borland 4.52 taitaa olla jo aikansa elänyt ;)
 
Mikäli joskus tulet tekemään isompia projekteja,

Toivottavasti joskus pääsen tekemään niitä isompia projekteja eli työllistyä alalle.

Tämä minun tilanne on, että olen valmistunut AMK:sta, mutta en ole löytänyt työpaikkaa. Yhdessä haastattelussa arvioitiin minun koodaustaitoja. Tultiin siihen tulokseen, että ne ei ole riittävät. Haastattelija antoi sellaisen neuvon, että niitä voi treenata omatoimiesesti.

Olen ottanut neuvosta opikseni ja yritän nyt opetella koodaamaan. Minulla on pitkä lista harjoituksia mitä teen. Harmi vain, että ei ole ketään neuvomassa, jotuu tällälailla kyselemään neuvoja netissä.
 
Andy- sanoi:
Jos luot esimerkiksi kokonaislukutaulukon int *p = new int[10], muista vapauttaessasi muistia käyttää hakasulkuja deleten perässä (delete[] p). Muuten delete vapauttaa vain ensimmäisen arvon, ja loput taulukon alkioista jää edelleen varatuiksi (lue: muistivuoto).
Kaikkien alkioiden muisti vapautetaan vaikka ei laittaisikaan hakasulkuja deleten jälkeen, mutta jos taulukossa on olioita niin destructoreja ei kutsuta.
 
Toivottavasti joskus pääsen tekemään niitä isompia projekteja eli työllistyä alalle.

Tämä minun tilanne on, että olen valmistunut AMK:sta, mutta en ole löytänyt työpaikkaa. Yhdessä haastattelussa arvioitiin minun koodaustaitoja. Tultiin siihen tulokseen, että ne ei ole riittävät. Haastattelija antoi sellaisen neuvon, että niitä voi treenata omatoimiesesti.
Ihan mielenkiinnostaa, mikä linja AMK:ssa ja mitä, jos mitään siellä opetettiin koodaamisesta? Java-only?

Olen ottanut neuvosta opikseni ja yritän nyt opetella koodaamaan. Minulla on pitkä lista harjoituksia mitä teen. Harmi vain, että ei ole ketään neuvomassa, jotuu tällälailla kyselemään neuvoja netissä.
C++:sta on kirjoitettu miljoona yksi peruskirjaa, joista tämän tyyppiset jutut (taustoineen/perusteineen) selviää helposti. Kirjastoon/kirjakauppaan marsmars.
 
vässy74,

Tietotekniikkalinja. Lähinnä sulautettuihin järjestelmiin keskityttiin.
Kyllä siellä opetettiin vaikka mitä. Kurssit pääsi vain niin helpolla läpi ja en laiskana jaksanut silloin panostaa. C++ siellä pääasiassa opetettiin, mutta pakollisissa kursseissa ei juuri olioita opetettu, enkä käynyt valinnaisena ohjelmointikursseja.

Minulla on joistain muista aineista todella hyviäkin arvosanoja, mutta koodaukset suoritin ykkösellä(paitsi assembler kurssi, josta tuli kolmonen).

Ei auta vaikka on kuinka hyvät arvosanat englannista, äidinkielestä, mikroproressoreista, käyttöjärjestelmistä, ohjelmistotekniikasta, kaupallisista aineista. Jos ei ole tarpeeksi hyvä koodaamaan, niin niitä töitä on vaikea saada.


Kyllä minulla on kirja ja muuta materiaalia, mutta joskus vain tökkää johonkin, niin pahasti, että pelkästään kirjasta katsomalla ei selviä.
 
vässy74,

Tietotekniikkalinja. Lähinnä sulautettuihin järjestelmiin keskityttiin.
Kyllä siellä opetettiin vaikka mitä. Kurssit pääsi vain niin helpolla läpi ja en laiskana jaksanut silloin panostaa. C++ siellä pääasiassa opetettiin, mutta pakollisissa kursseissa ei juuri olioita opetettu, enkä käynyt valinnaisena ohjelmointikursseja.

Minulla on joistain muista aineista todella hyviäkin arvosanoja, mutta koodaukset suoritin ykkösellä(paitsi assembler kurssi, josta tuli kolmonen).

Ei auta vaikka on kuinka hyvät arvosanat englannista, äidinkielestä, mikroproressoreista, käyttöjärjestelmistä, ohjelmistotekniikasta, kaupallisista aineista. Jos ei ole tarpeeksi hyvä koodaamaan, niin niitä töitä on vaikea saada.
Ok, kyllähän toi ihan järkevältä opintokokonaisuudelta kuulostaa, joissain oppilaitoksissa kun kuuluu nykyisin olevan "Java-only" muka työelämän tarpeiden takia. Sillä mindsetillä ei vaan synny oikeita ohjelmoijia, ainoastaan Java-kielen fakkiosaajia. IRL homma kuitenkin toimii niin että jos osaa ohjelmointia ja käyttiksiä low-level tasolla tarpeeksi niin minkä tahansa kielen oppiminen on suht. mutkatonta. Java on IMHO pirun huono noiden perusteiden opetteluun.

Jos ohjelmistotuotantoa millään tasolla aikoo työkseen tehdä niin low-level koodaustaidot on kyllä IMHO aika välttämättömiä. Pohjalta on suht. helppo nousta ylös työelämässä kunhan perusteet on kunnossa, mutta tahtoo olla että pelkällä high-level software engineering opinnoilla ei juurikaan töitä irtoa. Tätä ei varmaan muisteta koulussa riittävästi korostaa. Eikun tsemiä C++:n opiskeluun :thumbs:

nimim. itse leipä tienattu C/C++ softainssinä kohta 10 v...
 
vässy74,

Tietotekniikkalinja. Lähinnä sulautettuihin järjestelmiin keskityttiin.
Kyllä siellä opetettiin vaikka mitä. Kurssit pääsi vain niin helpolla läpi ja en laiskana jaksanut silloin panostaa. C++ siellä pääasiassa opetettiin, mutta pakollisissa kursseissa ei juuri olioita opetettu, enkä käynyt valinnaisena ohjelmointikursseja.

Minulla on joistain muista aineista todella hyviäkin arvosanoja, mutta koodaukset suoritin ykkösellä(paitsi assembler kurssi, josta tuli kolmonen).

Ei auta vaikka on kuinka hyvät arvosanat englannista, äidinkielestä, mikroproressoreista, käyttöjärjestelmistä, ohjelmistotekniikasta, kaupallisista aineista. Jos ei ole tarpeeksi hyvä koodaamaan, niin niitä töitä on vaikea saada.


Kyllä minulla on kirja ja muuta materiaalia, mutta joskus vain tökkää johonkin, niin pahasti, että pelkästään kirjasta katsomalla ei selviä.

Java on helpompi opiskella ja töitä tällä hetkellä riittää siellä puolella.
C++ kirjoista hyvä on Päivi Hietasen C++ ja olio-ohjelmointi opus jos sitä vielä jostain saa.

Oletko harkinnut hakevasi aikuispuolelle AMK:n lukemaan ohjelmistotekniikkaa/lisäopintoja? Saisit maksutonta opetusta ja voisit itse valita kurssit mitä luet.

Tuo Javan ja C:n vastakkainasettelu ei kuitenkaan ihan noin yksioikoista minusta ole mitä edellä on mainittu..Toki C on hyvä kieli laiteläheisenä ohjelmointikielenä mutta ei siitä juuri apua ole jos pitää lähteä vääntämään vaikka J2EE-arkkitehtuuriin perustuvia sovelluksia. Java-maailma kun kuitenkin omansa.
 
Itsekin kun on ohjelmointia lähes koko pienen ikänsä harrastanu, nii eipä siinä paljon kouluista työhaastattelussa edes kysytty. Itse kävin ohjelmointipainotteista linjaa AMK:ssa ja oon kyllä sitä mieltä että koulussa opituilla taidoilla ei tehdä työelämässä yhtään mitään. Ei se projektipäällikkö halua et sä teet käyttiksen konsolissa toimivan ohjelman joka kysyy kaks lukua jotka se superohjelma sit laskee yhteen. Kyllä tuo ohjelmointi on käytännössä opeteltava itse. Eikä pidä lannistua jos tuntuu vaikealta tai jopa mahdottomalta. Tuohon menee aikaa, ja sitä on pakko käyttää jos haluaa oppia. Sitten kun luulet osaavasi jo jotakin, niin opit vielä lisää ja huomaat ettet osannutkaan vielä mitään. Kannattaa ottaa jotain harrasteprojekteja joiden kautta opettelee kieltä. Opettelun yhteydessä tee pieniä pelejä tai hyötyohjelmia joita oikeasti kiinnostaa tehdä. Hommaa kirjoja ja lue netistä vinkkejä kuinka asioita tehdään ja tee niiden avulla aina vain hienompia ja monimutkaisempia ohjelmia. Tehokas C++ -kielen hyödyntäminen perustuu hyvin suunniteltujen luokkahierarkioiden käyttöön. Tämä kannattaa opetella alusta asti, sillä itsellä meni aivan liian monta vuotta hirveän spagettivyyhdin kanssa tapellessa. Opettele termit kunnolla ja yritä oikeasti sisäistää mitä mikäkin tarkoittaa (luokat, oliot, osoittimet jne.).
 
Tuo Javan ja C:n vastakkainasettelu ei kuitenkaan ihan noin yksioikoista minusta ole mitä edellä on mainittu..
En edes yrittänyt tehdä sitä enkä sanonut kumpi on kielenä parempi. Totesin että käyttistä lähempänä olevana C/C++ opettaa IMHO enemmän yleisen ohjelmoinnin perusteita (muistinhallintaa, alustuksia, huomioimaan konealustojen erot...) kuin Java. Siirtyminen C/C++ ==> Java on taatusti helpompi kuin päinvastoin olettaen että henkilö ymmärtää oliomuotoisen ohjelmoinnin ylipäätään. Toteutuskielinä molemmille kyllä paikkansa.
 

Suositut

Back
Ylös Bottom