Forum » Programiranje » Nemorem rešit ene naloge z c++ (sem začetnik)
Nemorem rešit ene naloge z c++ (sem začetnik)
xgeorgex ::
Rešitev je da za zadnjim cin >> dodam cin.ignore(); in sedaj dela tko k je treba...
Hvala...
Hvala...
bigbada ::
Kaj je narobe s sledečim programom? Program se prevede, ampak vseeno ni pravilen. Memory leak?
int main() { int i; int polje[10]; for(i=0; i<20; i++) { polje[i] = 0; } return 0; }
technolog ::
Kakšen memory leak neki.
Tipična prekoračitev rezerviranega prostora. Tabelo imaš rezervirano samo 0..9, ti pa jo dostopaš kot da je 0..19.
Tipična prekoračitev rezerviranega prostora. Tabelo imaš rezervirano samo 0..9, ti pa jo dostopaš kot da je 0..19.
xgeorgex ::
Zna kdo razložit zakaj pri spodnji kodi dobim error??
Hvala...
#include <iostream> using namespace std; int main() { int iSize1 = 5, iSize2 = 4; int *piNumbers = new int[iSize1][iSize2]; for(int x = 0;x < iSize1;x++) { for(int y = 0;y < iSize2;y++) { piNumbers[x][y] = 6; } } for(int x = 0;x < iSize1;x++) { for(int y = 0;y < iSize2;y++) { cout << piNumbers[x][y]; } } return 0; }
Hvala...
amacar ::
Ne moreš tak dvodimenzionalnega polja ustvarit.
Recimo takole bi šlo:
Recimo takole bi šlo:
#include <iostream> using namespace std; int main() { int iSize1 = 5, iSize2 = 4; int **piNumbers = new int*[iSize1]; for(int x = 0;x < iSize1;x++) piNumbers[x]=new int[iSize2]; for(int x = 0;x < iSize1;x++) { for(int y = 0;y < iSize2;y++) { piNumbers[x][y] = 6; } } for(int x = 0;x < iSize1;x++) { for(int y = 0;y < iSize2;y++) { cout << piNumbers[x][y]; } } return 0; }
Cvenemir ::
Besedilo naloge:
Izdelajte razred Študent, ki vsebuje podatke o imenu, priimku in vpisni številki. Implementiraje tudi metode za vpis in izpis podatkov študenta.
Napisal sem sledečo kodo. Problem se pojavi pri izpisu. Vedno mi izpiše prazne stringe. Kje je napaka?
Izdelajte razred Študent, ki vsebuje podatke o imenu, priimku in vpisni številki. Implementiraje tudi metode za vpis in izpis podatkov študenta.
Napisal sem sledečo kodo. Problem se pojavi pri izpisu. Vedno mi izpiše prazne stringe. Kje je napaka?
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace R1_študent { //Ustvarimo razred student public class student { //Definiramo objekte razreda public string ime; public string priimek; public string vpisnaStevilka; //Definiramo začetne vrednosti objektov public student() { ime = " "; priimek = " "; vpisnaStevilka = " "; } public student(string ime, string priimek, string vpisnaStevilka) { this.ime = ime; this.priimek = priimek; this.vpisnaStevilka = vpisnaStevilka; } //Metoda za vpis podatkov o študentu public void vpisiPodatke(string ime, string priimek, string vpisnaStevilka) { Console.WriteLine("Vnesite ime študenta: "); ime = Console.ReadLine(); Console.WriteLine("Vnesite priimek študenta: "); priimek = Console.ReadLine(); Console.WriteLine("Vnesite vpisno številko študenta: "); vpisnaStevilka = Console.ReadLine(); } //Metoda za izpis podatkov o študentu public void izpisiPodatke() { Console.WriteLine("Podatki študenta so: Ime: {0} --- Priimek: {1} --- Vpisna številka: {2}", ime, priimek, vpisnaStevilka); } } class Program { static void Main(string[] args) { //Ustvarimo objekt student1 student student1 = new student(); //Pokličemo metodo za vpis podatkov string ime ="", priimek ="", vpisnaStevilka =""; student1.vpisiPodatke(ime, priimek, vpisnaStevilka); //Prikažemo rezultate //Console.WriteLine("Podatki študenta so: "); student1.izpisiPodatke(); Console.ReadKey(true); } } }
donkihod ::
Cvenemir, zakaj metoda vpisiPodatke rabi argumente ime, priimek in vpisnaStevilka? To so itak lastnosti Studenta.
Cvenemir ::
Sem opazu ja. Po nekaj manjših popravkih stvar deluje pravilno, tako da vseeno hvala za pomoč :)
smoke ::
Uporabljaj raje vektorje.
No ja, vektor vektorjev je malo glomazna zadeva. Pointer na polje pointerjev na int (kot je nekdo zgoraj predlagal) je pa malo preveč C-jevsko . Če se že gremo C++, zakaj ne bi naredili objektno in s templejti?
Razred:
#ifndef MATRIX_H #define MATRIX_H #include <stdexcept> #include <new> template <typename T> class Matrix { public: // v primeru da new ne more "allocirat" spomina vrže bad_alloc exception Matrix(int x, int y) throw (std::bad_alloc) { rows = x; columns = y; mMatrix = new T[x*y]; } virtual ~Matrix() noexcept { delete [] mMatrix; } virtual T& operator() (int x, int y) throw (std::overflow_error) { if ((x >= rows) || (y >= columns)) { throw std::overflow_error(""); } return *(mMatrix+(x*rows)+y); } virtual int getRows() const noexcept { return rows; } virtual int getColumns() const noexcept { return columns; } protected: int rows, columns; T* mMatrix; }; #endif // MATRIX_H
Primer uporabe:
#include <iostream> #include "matrix" using namespace std; int main(int argc, char **argv) { Matrix<int> polje(5, 5); for (int i = 0 ; i < polje.getRows() ; ++i) { for (int j = 0 ; j < polje.getColumns() ; ++j) { polje(i, j) = i+1; cout << polje(i, j); } cout << endl; } return 0; }
Razredu sicer manjka default konstruktor tako da polja tega razreda ne gre ustvarit. Pravtako ni dinamičen (kot naprimer std::vector). Ampak toliko za idejo..
technolog ::
Izumljanje kolesa na novo. S tem da nisi pridobil na hitrosti, mogoče kak bajt na prostoru.
smoke ::
Jaz ne rabim nič dokazovat. Ti si rekel da ni razlike, ti razloži zakaj ne ;) Jaz še vedno pravim da je pointer na array dost hitrejši kot
:)
Aja.. zgornja koda ima grd bug, mea culpa, pozabil sem pomnožiti allociran spomin z velikostjo tipa T. Evo popravek majhen popravek razreda :)
std::vector<std::vector<T>>
:)
Aja.. zgornja koda ima grd bug, mea culpa, pozabil sem pomnožiti allociran spomin z velikostjo tipa T. Evo popravek majhen popravek razreda :)
#ifndef MATRIX_H #define MATRIX_H #include <new> #include <stdexcept> #include <memory> template <typename T> class Matrix { public: Matrix(int x, int y) throw (std::bad_alloc) { rows = x; columns = y; mMatrix = std::unique_ptr<T[]>(new T(x*y*sizeof(T))); } ~Matrix() = default; virtual T& operator() (int x, int y) throw (std::overflow_error) { if ((x >= rows) || (y >= columns)) { throw std::overflow_error(""); } return mMatrix[x*rows+y]; } virtual int getRows() const noexcept { return rows; } virtual int getColumns() const noexcept { return columns; } protected: int rows, columns; std::unique_ptr<T[]> mMatrix; }; #endif // MATRIX_H
mallard ::
Če se že greš hitrost, pol popravi konstruktor da ne dela brezzveznega dela: :)
Namesto std::overflow_error bi bla boljša std::out_of_range, IMHO. Pa še, kaj se zgodi če napišem
Matrix(int x, int y) throw (std::bad_alloc) : rows(x), columns(y), mMatrix(std::unique_ptr<T[]>(new T(x*y*sizeof(T)))) { }
Namesto std::overflow_error bi bla boljša std::out_of_range, IMHO. Pa še, kaj se zgodi če napišem
Matrix<int> m(-1,2);
Zgodovina sprememb…
- spremenilo: mallard ()
smoke ::
I stand corrected, res bi blo hitreje če bi inicializiral atribute takoj ob nastanku :) Glede tistih negativnih indeksov pa pač.. manjka še en check v konstruktorju v primeru če se najde nekdo ki bi imel array velikosti -1*2 in pa seveda še check v operatorju () za negativne vrednosti.
aljazko1995 ::
sem začetnik in nemorem narediti eden program
in ta je križci in krožci
prosim če ga eden lahko naredi
in ta je križci in krožci
prosim če ga eden lahko naredi
Zgodovina sprememb…
- spremenilo: aljazko1995 ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Pomoč pri programiranju z javoOddelek: Programiranje | 3541 (2468) | milc |
» | [C#] Operacija IN in ALI med dvema int številomaOddelek: Programiranje | 1169 (982) | LeQuack |
» | [C#] Input string was not in a correct format.Oddelek: Programiranje | 1082 (1019) | Cvenemir |
» | Pomoč pri programčkihOddelek: Programiranje | 2920 (2570) | Mitja Bonča |
» | [C] Narascajoce sortiranje linearnega seznamaOddelek: Programiranje | 1856 (1745) | Jebiveter |