KGigi Posted April 2, 2010 Posted April 2, 2010 Ugyanígy, csak cseréld fel a for ciklusokban, hogy meddig mész. A mátrixok sorfolytonosan vannak ábrázolva C++-ban. Tehát a tanulok az egy sor, nem pedig oszlop, mint pl. a koordinátageometriában.
BearVsMan Posted April 2, 2010 Posted April 2, 2010 Na eddig a kód: bool Minden_nyelven (const vector < vector <int> > &tanulok) { bool l = false; for ( int i=0; !l && i<tanulok.size(); i++) { for (int j=0;!l && j<tanulok.size(); j++) { l=(tanulok[j][i] != 0); } } return l; } Mit cseréljek fel pontosan?
KGigi Posted April 2, 2010 Posted April 2, 2010 Ez így most négyzetes mátrixokra működik, és elvileg jó. De még nézegetem, késő van és már zokni vagyok. Ugyanezt meg tudod csinálni két függvénnyel, egyszerűen a külső ciklusban hívj meg egy függvényt, amiben a belső ciklus van. Én logikai függvénnyel csinálnám, amit értékül adnék az l-nek.
Pjotr Posted April 2, 2010 Posted April 2, 2010 Ilyesmi lenne a cél? #include<iostream> #include<vector> using namespace std; int main() { vector<vector<int>> tanulok; bool l=false; for(unsigned int i=0;i<3;i++) { tanulok.push_back(vector<int>()); for (unsigned int j=0;j<4;j++) { //van nulla tanulok[i].push_back(j); //nincs nulla //tanulok[i].push_back(j+5); } } for(unsigned int i=0;!l && i<tanulok.size();i++) { for (unsigned int j=0;j<tanulok[i].size();j++) { if(l=(tanulok[i][j]==0)) break; } if(l) break; } if(l) cout<<"Van 0\n\n"; else cout<<"Nincs 0\n\n"; return 0; }
BearVsMan Posted April 3, 2010 Posted April 3, 2010 Ez így most négyzetes mátrixokra mûködik, és elvileg jó. De még nézegetem, késõ van és már zokni vagyok. Ugyanezt meg tudod csinálni két függvénnyel, egyszerûen a külsõ ciklusban hívj meg egy függvényt, amiben a belsõ ciklus van. Én logikai függvénnyel csinálnám, amit értékül adnék az l-nek. n x m-es mátrixra kell mûködjön a dolog. Itt a teljes feladat.(kivéve a read.h tartalmát, mely a readint és readnat fv-k) Feladat: Egy nyelviskolában n különbözõ nyelvet és mindegyiket m szinten oktatják. Nyilvántartást vezetnek arról, hogy melyik nyelvbõl melyik szinten hány hallgató van. Van-e olyan szint, amelyikbõl minden nyelven folyik oktatás? */ #include <iostream> #include <fstream> #include <string> #include <vector> #include "read.h" using namespace std; void Nyelveket_olvas(int n, const string &str, vector<string> &v); void Hallgatok_szamat_olvas(const vector<string> &nyelv, const vector<string> &szint, vector<vector<int> > &a); void Fajlbol_olvas(const string &fajlnev, vector<string> &nyelv, vector<string> &szint, vector<vector<int> > &tanulok); bool Minden_nyelven (const vector < vector <int> > &tanulok); bool Nem_nulla (int i, vector < vector <int> > tanulok); bool Letszam (int k); bool egykettoharom(int s); int main(int argc, char *argv[]) { vector<vector<int> > tanulok; vector<string> szint; vector<string> nyelv; // Beolvasás int s = 0; string fajlnev; if (argc<=1) { cout << "Valassza ki az adatbevitel modjat!\n"; cout << "1 - adatok beolvasasa billentyuzetrol\n"; cout << "2 - adatok beolvasasa fajlbol\n"; cout << "3 - kilepes\n"; s = ReadInt("Adatbevitel modja: ","1, 2 vagy 3 lehet", egykettoharom); } switch (s) { case 0: fajlnev = argv[1]; Fajlbol_olvas(fajlnev, nyelv, szint, tanulok); break; case 1: int n = ReadNat("Hany nyelv van? ", "Termeszetes szamot kerek!"); cout << "Adja meg a nyelveket:" << endl; Nyelveket_olvas(n, "nyelv: ", nyelv); cout << endl; int m = ReadNat("Hany szint van? ","Termeszetes szamot kerek!"); cout << "Adja meg a szinteket:"<< endl; Nyelveket_olvas(m, "szint: ", szint); cout << endl; cout << "Adja meg a hallgatok szamat!"<< endl; Hallgatok_szamat_olvas(nyelv, szint, tanulok); cout << endl; break; case 2: cout << "Add meg a fajl nevet: "; cin >> fajlnev; Fajlbol_olvas(fajlnev, nyelv, szint, tanulok); break; case 3: exit(0); } if (Minden_nyelven(tanulok)) { cout << "Van olyan szint amibol minden nyelven folyik oktatas!"; } else { cout << "Nincs olyan szint amibol minden nyelven folyik oktatas!"; } cout<<endl; char ch; cin>>ch; return 0; } //Feladat: Ha egy szintet minden nyelven oktatnak akkor igaz értékkel tér vissza. bool Minden_nyelven (const vector < vector <int> > &tanulok) { bool l = false; for ( int i=0; !l && i<tanulok.size(); i++) { l = (Nem_nulla(i, tanulok)); } return l; } //Feladat: Megnézi, hogy van-e olyan szint ahol a tanulok szama nem nulla. bool Nem_nulla (int i, vector< vector <int> > tanulok) { bool l = true; int j = 0; while ( l && j<tanulok[i].size() ){ l = (tanulok[j][i] != 0); j++; } return l; } void Nyelveket_olvas(int n, const string &str, vector<string> &v) { v.resize(n); for(int i=0; i<n; ++i) { cout << i+1 << "." << str; cin >> v[i]; } } bool Letszam(int k) { return k>=0 && k<=200; } void Hallgatok_szamat_olvas(const vector<string> &nyelv, const vector<string> &szint, vector<vector<int> > &a) { a.resize((int)nyelv.size()); for(int i=0; i<(int)nyelv.size(); ++i) { a[i].resize((int)szint.size()); cout << nyelv[i] << " nyelven tanulok:\n"; for(int j=0; j<(int)szint.size(); ++j) { cout << "\t" << szint[j] << ": "; a[i][j] = ReadInt(""," 0 es 200 kozotti Pozitiv szamot kerek!", Letszam); } } } void Fajlbol_olvas(const string &fajlnev, vector<string> &nyelv, vector<string> &szint, vector<vector<int> > &tanulok) { ifstream f(fajlnev.c_str()); if(f.fail()){ cout << "Hibas fajlnev!\n"; exit(1); } int n, m; f >> n >> m; string str; getline(f, str, '\n'); cout << "\nNyelvek:\n"; nyelv.resize(n); for(int i=0; i<n; ++i) { getline(f, nyelv[i], '\n'); cout << nyelv[i] << endl; } cout << "\nSzintek:\n"; szint.resize(m); for(int j=0; j<m; ++j) { f >> szint[j]; cout << szint[j] << endl; } cout << "\nHallgatok szama:\n"; tanulok.resize(n); for(int i=0; i<(int)nyelv.size(); ++i) { tanulok[i].resize(m); cout << nyelv[i] << " hallgatoi\n"; for(int j=0; j<(int)szint.size(); ++j) { f >> tanulok[i][j]; cout << "\t" << szint[j] << ": " << tanulok[i][j]; } cout << endl; } } bool egykettoharom(int s) { return s>=1 && s<=3; }
KGigi Posted April 3, 2010 Posted April 3, 2010 Figyelj, megírtam, de kérlek, fogj egy papírt és rajzold le, hogy mit csinálsz. Egyetemen is úgy csinálják, a tanár is, nem szégyen. És hidd el, magadnak segítesz, ha betartod a konvenciókat, én is belezavarodtam a kódodba. Az i a sorok futóindexe, a j az oszlopoké. Az nxm-es mátrixnak n sora és m oszlopa van. Ha nem volt még ilyen, akkor nyugodtan kiveheted belőle, a static kulcsszó azért szerepel ott, hogy ne a stacken, hanem a statikus területen jöjjön létre a változó, így csak a függvény első hívásakor számítódik ki. Amit nem értek, hogy a második függvényednél miért nem konstans referencia szerint vetted át a tömböt. Jelen esetben mindegy volt, de ilyeneken egy komolyabb programnál csúnyán el lehet csúszni. A futóindexet szintén konstansként célszerű. Mindig a legnagyobb megszorítással vedd át a paramétereket, mert annál kevesebb a hibalehetőség. Remélem, hogy nem néztem be semmit. bool Minden_nyelven (const std::vector < std::vector <int> > &tanulok) { int j = 0; bool l = false; static const int m = (int)tanulok[0].size(); while (j < m && !l) { l = (Nem_nulla(j, tanulok)); ++j; } return l; } bool Nem_nulla (const int j, const std::vector< std::vector <int> > &tanulok) { int i = 0; bool l = true; static const int n = (int)tanulok.size(); while (i < n && l) { l = (tanulok[i][j] != 0); ++i; } return l; } @Botond Igen, stringre nem működik, csak char-ra. Így ennyi a megoldás: std::string Upper (const std::string &kicsi) { const int n = (int)kicsi.size(); std::string nagy = ""; for (int i=0; i < n; ++i) { nagy += toupper(kicsi[i]); } return nagy; }
BearVsMan Posted April 4, 2010 Posted April 4, 2010 Figyelj, megírtam, de kérlek, fogj egy papírt és rajzold le, hogy mit csinálsz. Egyetemen is úgy csinálják, a tanár is, nem szégyen. És hidd el, magadnak segítesz, ha betartod a konvenciókat, én is belezavarodtam a kódodba. Az i a sorok futóindexe, a j az oszlopoké. Az nxm-es mátrixnak n sora és m oszlopa van. Ha nem volt még ilyen, akkor nyugodtan kiveheted belőle, a static kulcsszó azért szerepel ott, hogy ne a stacken, hanem a statikus területen jöjjön létre a változó, így csak a függvény első hívásakor számítódik ki. Amit nem értek, hogy a második függvényednél miért nem konstans referencia szerint vetted át a tömböt. Jelen esetben mindegy volt, de ilyeneken egy komolyabb programnál csúnyán el lehet csúszni. A futóindexet szintén konstansként célszerű. Mindig a legnagyobb megszorítással vedd át a paramétereket, mert annál kevesebb a hibalehetőség. Köszi így korrektül működik. Igazából a specifikációt megcsináltam ahogy kell. A helyes kódolással volt bajom, de így már érthető, hogy mit kellett volna máshogy csinálni.
KGigi Posted April 4, 2010 Posted April 4, 2010 Megmutatod a specifikációt? Mert ha jól írtad meg, akkor elég lett volna azt lekódolni.
BearVsMan Posted April 4, 2010 Posted April 4, 2010 A = (tanulók: Nnxm, l: L) Ef =( tanulók = tanulók’ és n=n’ és m=m’) Uf =( Ef és (l = i=1 SEARCH m-ig nemnulla(i) )) ahol nemnulla(i) 1≤i≤m →N (minden) nemnulla(i)= " j=1 SEARCH n-ig tanulok [j]!=0 Na a logikai jeleket nem jeleníti meg szóval azt átírtam. A kódolásban a tanulok[0].size -al volt bajom. Tehát, hogy az elsõ függvényben kellett volna használni és nem a nemnulla fv-ben.
KGigi Posted April 4, 2010 Posted April 4, 2010 Az utolsó sor így átírva nem egészen világos, de jónak tűnik, valami ilyesmi. Csakhogy a kódban mást csináltál. Nem véletlenül emeltem ki külön változóba, hogy mi n és m. Felcserélted, hogy mi felel meg a soroknak, és mi az oszlopoknak. Egyébként mit csinál az előfeltételben n és m? Az állapottérben nem szerepelnek változóként, így semmi keresnivalójuk ott.
skybot Posted April 24, 2010 Posted April 24, 2010 Elkészítettem elsõ programom Linux alatt. CodeLite-ot használtam, a cpp fájl megírásához, de nem tudom most mit kezdjek vele, hogy elinduljon. Tudnátok segíteni? Még debug se megy.
Pjotr Posted April 24, 2010 Posted April 24, 2010 Megírni elég lett volna használnod az mcedit-et. Fordításhoz g++ kellene (sudo apt-get install g++). Ezután már terminal-ból tudod fordítani. g++ -o prg prg_forras.cpp A paraméterek listájában nem vagyok teljesen biztos, nézz utána!
skybot Posted April 24, 2010 Posted April 24, 2010 Találtam egy Geany nevű szerkesztőt. Na ez le is fordítja. Előállít egy .o kiterjesztésű fájlt. De ezt nem tudom futtatni szintén. Megpróbáltam a parancssoros verziót is, de azt írja nem találja a fájlt. Hova kell menteni a forrást, hogy megtalálja?
Pjotr Posted April 24, 2010 Posted April 24, 2010 A .o csak az object, azt még linkelni is kellene. Konzolban ott kell kiadni a parancsot, ahol a cpp-d van, vagy a paraméterlistában kell megadni a teljes útvonalat..
BearVsMan Posted May 5, 2010 Posted May 5, 2010 Lenne egy olyan kérdésem, hogy hogyan tudnám megvalósítani c++-ban a deltoidok típusát az átlóik hosszával és azzal az aránnyal ami megmutatja, hogy hol metszi az egyik átló a másikat? Össz vissz 2 órán foglalkoztunk az osztályokkal és nem sok mindent vágok belőle. Diagonális mátrix meg polinom lekódolásahoz van alapom, de ezzel most akadályba ütköztem.
KGigi Posted May 5, 2010 Posted May 5, 2010 Csak találnod kell egy reprezentációt. Ehhez nem is kell osztály, elég egy rekord, hiszen nincsenek metódusok, csak adattagok. Eltárolsz két egész számot, ami a két átló, illetve egy lebegõpontosat, ami az arány.
BearVsMan Posted May 5, 2010 Posted May 5, 2010 A probléma az, hogy muszáj osztállyal megcsinálni. Aztán meg kell mondani az oldalait szögeit stb.. Köszi az instrukciókat. Rajta vagyok az ügyön. Csak szorít a határidő meg a zh-k
KGigi Posted May 6, 2010 Posted May 6, 2010 Akkor lesz egy osztályod metódusok nélkül. Bár az oldalak, szögek kiszámítása nyilván az lesz. Ha beviszed ezt a három adattagot, onnantól elemi matek az egész.
KGigi Posted May 15, 2010 Posted May 15, 2010 Akkor itt az ideje pótolni. Pár szinusz és koszinusz tétel az egész.
BearVsMan Posted May 15, 2010 Posted May 15, 2010 Á nem azzal van baj, hanem az osztály-al. Nem vágom ezt az részt. Megcisnálni egy deltoidot a 2 atlo meg a felezesi aranyuk segítségével stb.. osztály-al? Pfff, nemcsak azzal van itt gond...
KGigi Posted May 15, 2010 Posted May 15, 2010 class deltoid { private: int oldal1; int oldal2; float arany; public: deltoid(int o1, int o2, float a) : oldal1(o1), oldal2(o2), arany(a) {} ... }; Nem értem, mi a gond.
BearVsMan Posted May 18, 2010 Posted May 18, 2010 Meg. Pap Gábor Sándorné. Szerintem az egyik legjobb, fõleg Kõhegyi után. Igazság szerint nekem az a 2 óra amit erre szántunk nem volt elég. Most meg nincs rá idõm, hogy foglakozzak már vele. Az elkövetkezendõ 2 hétben elég sok tennivalóm lesz :/
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now