» »

Nemorem rešit ene naloge z c++ (sem začetnik)

Nemorem rešit ene naloge z c++ (sem začetnik)

1
2
»

xgeorgex ::

Rešitev je da za zadnjim cin >> dodam cin.ignore(); in sedaj dela tko k je treba...
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.

xgeorgex ::

Zna kdo razložit zakaj pri spodnji kodi dobim error??
#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:
#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;
}

xgeorgex ::

Lahko malo razložiš prosim...
Hvala

technolog ::

Uporabljaj raje vektorje.

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?


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

technolog je izjavil:

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

Nisem pridobil na hitrosti? Elaboriraj prosim, zakaj ne :)

technolog ::

Naredi benchmark z zastavico -02, pa da te vidimo :)

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

Zgodovina sprememb…

technolog ::

Daj začni z osnovami. :)
1
2
»


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Pomoč pri programiranju z javo

Oddelek: Programiranje
203421 (2348) milc
»

[C#] Operacija IN in ALI med dvema int številoma

Oddelek: Programiranje
111120 (933) LeQuack
»

[C#] Input string was not in a correct format.

Oddelek: Programiranje
61021 (958) Cvenemir
»

Pomoč pri programčkih

Oddelek: Programiranje
152795 (2445) Mitja Bonča
»

[C] Narascajoce sortiranje linearnega seznama

Oddelek: Programiranje
71796 (1685) Jebiveter

Več podobnih tem