HTML

Programozó Páternoszter

Ez a Programozó Páternoszter (PP) blogja, a programozásról szól. Aktualitása, hogy a Debreceni Egyetem Informatikai Kara Magasszintű programozási nyelvek 1-2, C++ esattanulmányok, Java esettanulmányok című kurzusainak blogja is egyben.

A vadászat

A Debreceni Egyetem Programozói Évkönyve: az UDPROG projekt. A szakmai fórumunk a Facebook-en. Az új előadások a prezin.
A régi előadások:
Prog1:
1. C bevezetés
2. C tárgyalás
3. C befejezés
4. C a gyakorlatban
5. C++ bevezetés
6. C++ tárgyalás
7. C++ befejezés
8. C++ a gyakorlatban
9. Java platform bevezetés
10. Kvantuminformatikai alg. bev.
Prog2:
1. Java bevezetés
2. Java tárgyalás
3. Java befejezés
4. Java a gyakorlatban
5. Software Engineering bev.
6. Java EE bevezetés
7. AspectJ bevezetés
8. BPMN-BPEL SOA programozás
9. C++ haladó
10. Tensorflow

Kövess engem!

Friss topikok

Linkblog

Közös feladatok, államvizsga beugró

2013.03.10. 13:24 nb

Mi sarkantyúzna, nagy eszmék miatt,
Hogy a muló perc élvéről lemondj?
Míg most, jövőd ködön csillogva át,
Ha percnyi léted súlyától legörnyedsz,
Emel majd a végetlen érzete.
S ha ennek elragadna büszkesége,
Fog korlátozni az arasznyi lét.
És biztosítva áll nagyság, erény.

Madách Imre, Az ember tragédiája, http://mek.oszk.hu/00900/00914/html/madach15.htm

Kedves Hallgatóim, ebben a posztban az ("interprogkurzus") közös feladatsort állítjuk össze. Hogy idővel ezek a feladatok kinövik-e magukat a most (és egy ideje már) tervezett államvizsga beugró programozási feladatoknak, az jelen pillanatban még kérdéses. S könnyen meglehet, hogy az a szintén jobbító motivációjú, ám opponens megközelítés győz, miszerint "scanf háromszög oldalai, printf területe" jellegű feladatok kellenek az államvizsgára. Ez a megközelítés tőlem nagyon távol áll, mert meggyőződésem, hogy a tervezett államvizsga feladatsorokat a külső megfigyelők, például

  • az egyetemet kereső közéspiskolások
  • a K+F feladatokat, vagy egyszerűen szakértést kihelyezni tervező
  • a munkaerőt kereső cégek
  • a támogató vagy versenyben álló társintézmények

a mi interpretációnktól függetlenül a képzésünkkel fognak azonosítani, azzal az egyszerű heurisztikával, hogy "mi ezt tudjuk".

Az imént említett "opponenes példa" programozási nyelvi szempontból véleményem szerint értékelhetetlen (nem a beépített matematika miatt, hiszen egy algoritmusnak egy hatékony megvalósítását, mondjuk párhuzamos környezetben például CUDA-val, vagy OpenMP-vel természetesnek és fontosnak tartom - mint ahogyan vannak is ilyen laborfeladataink -  de ezek az algoritmusok azért túl kell mutassanak a szóban forgó Hérón képlet szimpla alkalmazásán :)

S persze azt se feledjük, hogy a mi megközelítésünkben a hallgató minden esetben internetes gépével dolgozhat (így a prog1 laborvédéseken, szóbeli és írásbeli vizsgán vagy akár a tervezett államvizsga beugrón is). Jó intuitív kép, ha az ideális informatikus mérnök hallgatónkat úgy képzeljük el, hogy a Linuxos laptopja rá van operálva a karjára :)

prog1.png

A kép csak illusztráció.

E kis bevezető után tehát íme a mi kurzusunk hozzájárulása a prog1 közös feladatok halmazához. Vegyük észre, hogy az általunk a közösbe delegált feladatok rendre a  laborfeladataink, a másodiktól labortól az utolsókig. (A feladat nehézségét a kiírás elején tüntetem fel, s egyben most fel is adom ide beküldhető trófeának a feladat tiszta C++* megvalósítását, feladatonként az első 10 hallgatót pontozom).

  1. [7 pont] A Google PageRank algoritmus implementációja C++ nyelven (didaktika: kvázi két egymásba ágyazott for ciklus a mátrix-vektor szorzás megvalósítására). Ezzel a feladattal a 2. laboron foglalkoztunk.
  2. [9 pont] Az EXOR-os titkosítás brute force törése C++ nyelven. Ezzel a feladattal a 3. laboron foglalkoztunk.
  3. [15 pont] Liv, Zempel, Welch algoritmussal bináris szófa építése, a fát jellemző mennyiségek meghatározása a Humán Genom 2. kromoszómájára, C++ nyelven. Ezzel a feladattal a 4-5. laborokon foguk foglalkozni (illetve ez lesz az első laborvédés témája).
  4. [20 pont] A Conway-féle életjáték grafikus megvalósítása Qt C++-ban. (Tavaly itt foglalkoztunk vele, idén majd slot-signal-ra átírni a callback helyett lesz a téma.)
  5. [22 pont] OpenMP alapú Mandelbrot-halmaz nagyító és mentő program írása C++ nyelven. (Tavaly itt foglalkoztunk ezzel.)
  6. [23 pont] POSIX Threads alapú Mandelbrot-halmaz nagyító és mentő program írása C++ nyelven. (Tavaly itt foglalkoztunk ezzel.)
  7. [27 pont] CUDA alapú Mandelbrot-halmaz nagyító és mentő program írása C++ nyelven. (Tavaly ez nem volt, de itt a részletes kidolgozása.)
  8. [35 pont] 2D grafikus megjelenítő írása a Quantum Consciousness Soccer Simulator - kvantum-tudatos foci szimulátorhoz C++ nyelven, Qt-vel.
  9. [70 pont] Saját Lexer osztállyal felszerelt 2D RoboCup Soccer Simulation multiágens robotfoci csapat készítése C++ nyelven. (Kiindulási csapatod lehet például majd a Debrecen Round Forest FC++, természetesen nem ezzel kezdünk a laboron.)
  10. [100 pont] Saját Quantum Consciousness Soccer Simulator multiágens foci és szurkolói csapat készítése C++ nyelven.

A második laborvédés témájaként az utolsó 3 feladat egyike választható (amelyet nyilván egészen más szinten kell ismerni közös feladatként illetve laborvédésként).

*: C++ headerek, malloc->new stb.

127 komment

A bejegyzés trackback címe:

https://progpater.blog.hu/api/trackback/id/tr215125898

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

cellSigma 2013.03.10. 15:05:23

Page Rank (7 pont)

#include <iostream>
#include <cmath>

#define SENSITIVITY 0.000000001

using namespace std;

void kiir (double tomb[], int db){
int i;
for(i=0; i<db; ++i)
cout << tomb[i]<< endl;;
}

double tavolsag (double PR[], double PRv[], int n){

int i;
double osszeg;

for (i=0; i<n; ++i)
osszeg=((PRv[i]-PR[i])* (PRv[i]-PR[i]));
return sqrt(osszeg);

}

int main(void) {

double L[4][4]= {
{0.0, 0.0, 1.0/3.0, 0.0},
{1.0, 1.0/2.0, 1.0/3.0, 1.0},
{0.0, 1.0/2.0, 0.0, 0.0},
{0.0, 0.0, 1.0/3.0, 0.0}
};

double PR[4]={0.0,0.0,0.0,0.0};
double PRv[4]={1.0/4.0, 1.0/4.0, 1.0/4.0, 1.0/4.0};

int i,j;

for(;;){

for(i=0;i<4;++i){
PR[i]=0.0;
for(j=0; j<4; ++j){
PR[i]+=(L[i][j]*PRv[j]);
}
}

if(tavolsag (PR, PRv, 4) < SENSITIVITY)
break;

for(i=0;i<4;++i)
PRv[i]=PR[i];

}

kiir(PR, 4);

return 0;
}

Kép: tinypic.com/r/xla6ax/6

nb · http://fersml.blog.hu 2013.03.10. 15:32:29

@cellSigma: OK., adnék további 5 pontot, ha átírod OO-ra, azaz pl. egy class PR lenne pl. (persze rajtad kívül még defaultban megtehetik ezt hárman itt).

nb · http://fersml.blog.hu 2013.03.10. 15:33:08

@nb: ja, s közben a define is menjen át const-ba :-))

cellSigma 2013.03.10. 16:43:28

@nb: Készen van az OO-s változat - legalábbis az első változat, még biztosan sokat lehetne finomítani rajta:

#include <iostream>
#include <cmath>

const double sensitivity=0.00000001;

using namespace std;

class PR {

double rank=0.0;
public:

void set_rank(double new_rank){ rank=new_rank;}
double get_rank(void){ return rank;};
void add_rank(double addendum){ rank+=addendum;}
double tavolsag_vektortol(double prVector)
{
return sqrt((rank-prVector)*(rank-prVector));
}

void kiir(void)
{
cout<<rank<<endl;
}

};

bool can_we_stop(PR PageRank[], double RankVector[], int arraySize) //nem tetszik ez a megoldás, talán lenne jobb is
{
double osszeg=0.0;
for (int i=0; i<arraySize;++i)
osszeg+=PageRank[i].tavolsag_vektortol(RankVector[i]);
return (osszeg<sensitivity)? 1:0;
}

int main(void) {

double L[4][4]= {
{0.0, 0.0, 1.0/3.0, 0.0},
{1.0, 1.0/2.0, 1.0/3.0, 1.0},
{0.0, 1.0/2.0, 0.0, 0.0},
{0.0, 0.0, 1.0/3.0, 0.0}
};

PR PageRank[4];
double PageRankVector[4]={1.0/4.0, 1.0/4.0, 1.0/4.0, 1.0/4.0};
bool we_can_stop=0;

for(;;){

for(int i=0;i<4;++i){
PageRank[i].set_rank(0.0);
for(int j=0; j<4; ++j){
PageRank[i].add_rank((L[i][j]*PageRankVector[j]));
}
}

for(int i=0; i<4; ++i)
{

}
if (can_we_stop(PageRank, PageRankVector, 4))
break;

for(int i=0;i<4;++i)
PageRankVector[i]=PageRank[i].get_rank();

}

for(int i=0; i<4;++i) PageRank[i].kiir();

return 0;
}

Kép: tinypic.com/r/zjbgic/6

cellSigma 2013.03.10. 16:46:20

@cellSigma: A tavolsag függvénybe egy hiba csúszott, az osszeg változónak nem új értéket adunk a for ciklus minden lépésében, hanem összeadjuk az értékeket, helyesen az egész kód tehát:

#include <iostream>
#include <cmath>

#define SENSITIVITY 0.000000001

using namespace std;

void kiir (double tomb[], int db){
int i;
for(i=0; i<db; ++i)
cout << tomb[i]<< endl;;
}

double tavolsag (double PR[], double PRv[], int n){

int i;
double osszeg;

for (i=0; i<n; ++i)
osszeg+=((PRv[i]-PR[i])* (PRv[i]-PR[i]));
return sqrt(osszeg);

}

int main(void) {

double L[4][4]= {
{0.0, 0.0, 1.0/3.0, 0.0},
{1.0, 1.0/2.0, 1.0/3.0, 1.0},
{0.0, 1.0/2.0, 0.0, 0.0},
{0.0, 0.0, 1.0/3.0, 0.0}
};

double PR[4]={0.0,0.0,0.0,0.0};
double PRv[4]={1.0/4.0, 1.0/4.0, 1.0/4.0, 1.0/4.0};

int i,j;

for(;;){

for(i=0;i<4;++i){
PR[i]=0.0;
for(j=0; j<4; ++j){
PR[i]+=(L[i][j]*PRv[j]);
}
}

if(tavolsag (PR, PRv, 4) < SENSITIVITY)
break;

for(i=0;i<4;++i)
PRv[i]=PR[i];

}

kiir(PR, 4);

return 0;
}

Scrop 2013.03.10. 18:03:32

@cellSigma: Üdv, csak gondoltam szólok h szerintem nem ezt a kódot akartad ide leírni :D Hiszen ez az eredeti pagerankod amiben még a #define is benne van.

cellSigma 2013.03.10. 18:49:14

@Scrop: Szia! Köszönöm szépen, hogy szóltál, megnéztem, elvileg ezt akartam, az eredetiben elrontottam a tavolsag fv-t, 'osszeg+=' ... helyett 'osszeg=' van benne,ezt akartam javítani, és ezért másoltam be mégegyszer, egy karakter módosítással :)
De tényleg köszönöm, hogy vetted a fáradtságot, és megnézted a kódomat, szeretném is 1 ponttal honorálni :)

K.E.910720 2013.03.10. 21:51:09

lehet még az első feladattal nevezni?

K.E.910720 2013.03.10. 22:30:40

#include <iostream>
#include <cmath>

using namespace std;

void kiir(double tomb[],int darab)
{int i=0;

for(i=0;i<darab;i++)
{
cout<<tomb[i]<<' ';

}
}

double tav(double PR[],double PRv[],int n)
{int i;
double osszeg=0;
for(i=0;i<n;i++)
{
osszeg+=(PRv[i]-PR[i]) * (PRv[i]-PR[i]);
}
return sqrt (osszeg);
}

int main(void)
{int i,j,k=1;

double matrix[4][4]=
{{0.0,0.0,1.0/3.0,0.0},
{1.0,1.0/2.0,1.0/3.0,1.0},
{0.0,1.0/2.0,0.0,0.0},
{0.0,0.0,1.0/3.0,0.0},};

double PR[4]={0.0,0.0,0.0,0.0};
double PRv[4]={1.0/4.0,1.0/4.0,1.0/4.0,1.0/4.0};

while(k){

for(i=0;i<4;i++){PR[i]=0;}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++) PR[i]+=PRv[j]*matrix[i][j];
}

if (tav(PR,PRv,4)<0.0000000001) k=0;
else {i=0;while(i<4)
{
PRv[i]=PR[i];
i++;
}
}

}
kiir(PR,4);

return 0;
}

DeeGort 2013.03.11. 01:06:03

Pagerank OOP:
Ígyekeztem elég általánosra megírni.
kepfeltoltes.hu/130311/pg_www.kepfeltoltes.hu_.png

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

class Pagerank
{
public:
Pagerank(const int, const int);
~Pagerank();
bool fill(const double *tomb, const int x, const int y);
void print(const int db);
void calculate();
int const getX(){return itsX;}
int const getY(){return itsY;}
private:
double distant();

int itsX, itsY;
double ** L;
double * PR;
double * PRv;
};

Pagerank::Pagerank(const int x, const int y)
{
itsX = x;
itsY = y;

L = new double*[itsY];
for(int i = 0; i < itsY; ++i)
L[i] = new double[itsX];

PR = new double[itsX];
PRv = new double[itsX];
for (int i = 0 ; i != itsX; i++)
{
PR[i] = 0.0;
PRv[i] = 1.0 / (double)itsX;
}
}

Pagerank::~Pagerank()
{
for(int i = 0; i < itsY; ++i)
delete [] L[i];
delete[] L;
delete[] PR;
delete[] PRv;
}

bool Pagerank::fill(const double *tomb, const int x, const int y)
{
if (x > itsX || y > itsY)
return 1;

for (int i = 0; i != y; i++)
for (int j = 0; j != x; j++)
L[i][j] = *(tomb++);

return 0;
}

void Pagerank::print(const int db)
{
for (int i = 0; i != db; i++)
cout << PR[i] << endl;
}

void Pagerank::calculate()
{
for (;;)
{
for(int i = 0; i < itsX; ++i)
{
PR[i] = 0.0;
for(int j = 0; j < itsX; ++j)
PR[i] += (L[i][j] * PRv[j]);
}
if (distant() < 0.00000001)
break;

for(int i = 0; i < itsX; ++i)
PRv[i] = PR[i];
}
}

double Pagerank::distant()
{
double osszeg = 0;

for(int i = 0; i < itsX; ++i)
osszeg += (PRv[i] - PR[i]) * (PRv[i] - PR[i]);

return sqrt(osszeg);
}

int main()
{
const int x = 4, y = 4;
double L[y][x] = {
{0.0, 0.0, 1.0 / 3.0, 0.0},
{1.0, 1.0 / 2.0, 1.0 / 3.0, 1.0},
{0.0, 1.0 / 2.0, 0.0, 0.0},
{0.0, 0.0, 1.0 / 3.0, 0.0}
};
double *pL = &L[0][0];

Pagerank googleEngine(x, y);
if(googleEngine.fill(pL, x, y))
cout << "Helytelen meret.." << endl;
else
{
googleEngine.calculate();
googleEngine.print(4);
}

return 0;
}

5 pont

nb · http://fersml.blog.hu 2013.03.11. 13:29:36

@cellSigma: mit szólnál, ha feldobnék egy olyan feladatot, hogy további 5 pont, ha a megoldásodat összeveted és közelíted valamelyik már fent lévőhöz innen: www.inf.unideb.hu/~nbatfai/kuzdjesbizvabizzal/harmadikOOcsomag_pr_variaciok/

cellSigma 2013.03.11. 18:44:26

@nb: Elkészültem vele, tanár úr, nem tudom, jár-e majd rá a pont, mert a legkezdőbb változat alapján készítettem, mert már abban is sok megemészteni való információ volt, és alig változtattam az eredeti kódon, mindenesetre tanulságos feladat volt.

main.cpp:

#include <iostream>
#include "pr.h"
using namespace std;

int main()
{
PR pr(4);
int meret;

double* vektor=pr.compute(meret);
for(int i=0;i<meret;++i)
cout<<vektor[i]<<endl;

return 0;
}

pr.cpp:

#include "pr.h"

double PR::distance(double* pr, double* prv, int length)
{
double sum=0.0;
for(int i=0;i<length;++i)
sum+=(prv[i]-pr[i])*(prv[i]-pr[i]);
return std::sqrt(sum);
}

double* PR::compute(int &the_size)
{

for(;;)
{
for(int i=0;i<size;++i)
{
pr[i]=0.0;
for(int j=0;j<size;++j)
pr[i]+=(matrix[i][j]*prv[j]);
}
if(distance(pr,prv, size)<PR::sensitivity) break;
for(int i=0;i<size;++i)
prv[i]=pr[i];
}

the_size=size;
return pr;
}

pr.h:

#include <cmath>

class PR
{
public:
static const double sensitivity=0.000000001;

PR(int size)
{
this->size=size;
pr=new double[size];
prv=new double[size];
for(int i=0;i<size;++i)
{
pr[i]=0.0;
prv[i]=1.0/size;

}
}

~PR()
{
delete[] pr;
delete[] prv;
}

double* compute(int &the_size);

private:
double distance (double* pr, double *prv, int length);
int size;
double matrix[4][4]=
{
{0.0, 0.0, 1.0/3.0, 0.0},
{1.0,1.0/2.0, 1.0/3.0, 1.0},
{0.0, 1.0/2.0, 0.0, 0.0},
{0.0, 0.0, 1.0/3.0, 0.0}
};
double* pr;
double* prv;
};

Kép: tinypic.com/r/10rve6u/6

nb · http://fersml.blog.hu 2013.03.11. 19:09:42

@cellSigma: hogyne járna, persze! Kérdés, hogy mennyi, megadnám a +5-öt is, ahogy feldobtam, ha csont nélkül fordulna... mert nálad a szerencsés warning nálam error a

norbi@colossus:~/Documents/P1/hallg/cellSigma$ g++ -std=c++11 pr.cpp main.cpp -o pr
...
pr.h:6:41: error: ‘constexpr’ needed for in-class initialization of static data member ‘const double PR::sensitivity’ of non-integral type [-fpermissive]
...
nekem

norbi@colossus:~/Documents/P1/hallg/cellSigma$ g++ --version
g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2

verzióm van.

cellSigma 2013.03.11. 19:24:19

@nb: Megnéztem, én az -std=c++11 kapcsoló nélkül fordítottam, de simán fordul így:

pr.h

#include <cmath>

class PR
{
public:
static constexpr double sensitivity=0.000000001;

PR(int size)
{
this->size=size;
pr=new double[size];
prv=new double[size];
for(int i=0;i<size;++i)
{
pr[i]=0.0;
prv[i]=1.0/size;

}
}

~PR()
{
delete[] pr;
delete[] prv;
}

double* compute(int &the_size);

private:
double distance (double* pr, double *prv, int length);
int size;
double matrix[4][4]=
{
{0.0, 0.0, 1.0/3.0, 0.0},
{1.0,1.0/2.0, 1.0/3.0, 1.0},
{0.0, 1.0/2.0, 0.0, 0.0},
{0.0, 0.0, 1.0/3.0, 0.0}
};
double* pr;
double* prv;
};

A sensitivity deklarációjában a const lett lecserélve constexpr-re
A másik két forráskódban pedig nem kell változtatni.
Az új változat fordítása -std=c++11 kapcsoló nélkül és azzal együtt:

tinypic.com/r/27ys6w/6

De a hiba miatt azt hiszem,nem ér 5 pontot a megoldás... 3 pontban megegyezhetünk, tanár úr? :)

DeeGort 2013.03.11. 22:57:44

Átírtam az exor-t C++-ra:
kepfeltoltes.hu/130311/exor_www.kepfeltoltes.hu_.png

#include <cstdio>
#include <unistd.h>
#include <cstring>
#include <cctype>
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;

class Key
{
public:
Key(int length);
~Key();
char operator[](int index);
char * operator++();
char * getKey();

private:
int itsLen;
char * key;
};
Key::Key(int length)
{
itsLen = length;
key = new char[length];
for (int i = 0; i != length; i++)
key[i] = '0';
}
Key::~Key()
{
delete[] key;
}
char Key::operator[](int index)
{
return key[index]; // Nincs ellenorzes!
}
char * Key::operator ++()
{
// Na ez eleg szepre sikerult
int value = atoi(key) + 1;
if (value > pow(10, itsLen))
return key[0] = EOF, key;

char param[itsLen];

// Egy kis printf hack
sprintf(param, "%%0%dd", itsLen);
sprintf(key, param, value);

return key;
}
char * Key::getKey()
{
return key;
}

class Exor
{
public:
Exor(int len, char code[], int codeLen);
~Exor();

int tisztaLehet();
int exorTores();
void processing();
char const * getKey();
char const * getCode();
bool operator++();

private:
char * itsCode;
Key * itsKey;
int keyLen;
int itsCodeLen;
};

Exor::Exor(int len, char code[], int codeLen)
{
itsKey = new Key(len);
keyLen = len;
itsCode = new char[codeLen];
for (int i = 0; i != codeLen; i++)
itsCode[i] = code[i];
itsCodeLen = codeLen;
}

Exor::~Exor()
{
delete itsKey;
delete itsCode;
}

int Exor::tisztaLehet()
{
// Egyedi helyes kod felismeres
int counter = 0;
// Megszamoljuk a betuket es a szokozoket
for (int i = 0; i != itsCodeLen; i++)
if (isalnum(itsCode[i]) || isspace(itsCode[i]))
counter++;

// Ha betuk es szokozok szama a teljes kodhossz 78%-nal nagyobb akkor valoszinuleg megvan.
if ((float)counter / (itsCodeLen) > 0.80)
return 1;
return 0;
}

void Exor::processing()
{
int kulcs_index = 0;

for (int i = 0; i < itsCodeLen; ++i)
{
itsCode[i] ^= (*itsKey)[kulcs_index];
kulcs_index = (kulcs_index + 1) % keyLen;
}
}

int Exor::exorTores()
{
processing();
return tisztaLehet();
}

bool Exor::operator ++()
{
++(*itsKey);
if((*itsKey)[0] == EOF) return 0;
return 1;
}

char const * Exor::getKey()
{
return itsKey->getKey();
}

char const * Exor::getCode()
{
return itsCode;
}

int main()
{
const int MAX_TITKOS = 4096;
const int OLVASAS_BUFFER = 256;
const int KULCS_MERET = 8;

char titkos[MAX_TITKOS];
char *p = titkos;
int olvasott_bajtok;

while((olvasott_bajtok =
read (0, (void *) p,
(p - titkos + OLVASAS_BUFFER <
MAX_TITKOS) ? OLVASAS_BUFFER : titkos + MAX_TITKOS - p)))
p += olvasott_bajtok;

for(int i = 0; i < MAX_TITKOS - (p - titkos); ++i)
titkos[p - titkos + i] = '\0';

// Initialize exor
Exor exor(KULCS_MERET, titkos, p - titkos);

do{
// cout << exor.getKey() << endl;
if(exor.exorTores())
cout << "Kulcs: [" << exor.getKey() << "]\nTiszta szoveg: [" << exor.getCode() << endl;
exor.processing();
}while(++exor);

return 0;
}

9 Pont

Tasnádi Dániel 2013.03.13. 09:26:41

Gartner eladások (2012 negyedik negyed év)
Android eladások: 122,480.0 darab, 72.4% piaci részesedés.
(1 pont)

www.gartner.com/newsroom/id/2237315

Tasnádi Dániel 2013.03.13. 11:52:53

@nb: Tiszteletem Tanár úr!

Ahogy a mai előadás után említettem, pár pontom lemaradt a múltheti összegzésből. Egyúttal beírtam a dokumentumba az eheti pontjaimat is. (megelőlegezve magamnak a mai előadáson elhangzott feladatért ígért 1 pontot is. (Android piaci részesedése- két hozzászólással feljebb)

www.dropbox.com/sh/l5qfvzavrazoe79/vGMQq0hE0B

DeeGort 2013.03.14. 16:47:22

Saját Top implementáció:
kepfeltoltes.hu/130314/top1_www.kepfeltoltes.hu_.png
kepfeltoltes.hu/130314/top2_www.kepfeltoltes.hu_.png
kepfeltoltes.hu/130314/top3_www.kepfeltoltes.hu_.png

Van némi eltérés a top és a ctop között, de ez azért van mert más a két program lekérdezési üteme.

Forrás és a program:
data.hu/get/6312952/ctop.tar.gz

10 pont (esetleg még egy kis ráadás?)

ShuffleSource 2013.03.14. 23:54:43

Pi generátor:
www.youtube.com/watch?v=FWqltx3fwBs
Még éjfél előtt gyorsan :D
Mindjárt feltöltöm a forráskódot is!

ShuffleSource 2013.03.15. 15:56:22

@DeeGort: Egyébként grat a ctop-hoz!

B.Norbi93 2013.03.15. 21:37:45

Ha még lehet, eltennék 7 pontot egy PageRankért:

imagerz.com/QE8SUUtvAwMBXlpPRwVR

nb · http://fersml.blog.hu 2013.03.17. 15:56:54

@K.E.910720: melyik feladatra gondolsz pontosan?

nb · http://fersml.blog.hu 2013.03.17. 16:00:30

@Tasnádi Dániel: valami indentálást majd izzítsunk, mert ez a kód rettenetesen néz ki így. De hogy valóban izzítsunk, adnék további +1 pontot, ha újra látom indentálva!

Tasnádi Dániel 2013.03.17. 16:54:40

@nb: Köszönöm a lehetőséget, kész is van:
Ha megfelel, elkönyvelem az egy pontot.

kepfeltoltes.hu/130317/2013-03-17-165056_1400x1300_scrot_www.kepfeltoltes.hu_.png

ShuffleSource 2013.03.19. 00:54:15

Mátrix fv könyvtár OO-an, sok metódussal és inverz számítással:
pastebin.com/wXjTatEB

ShuffleSource 2013.03.19. 00:57:25

@cellSigma: egy tuti: c++98-ban nem definiálhatsz változókat csak deklarálhatod őket! Az értékadást rakd át a konstruktorba vagy használd a c++11 kapcsolót! (ezért jár pont? :D)

cellSigma 2013.03.19. 06:43:31

@ShuffleSource: Köszi, tényleg a c++11 kapcsoló volta kulcsa a fordításnak, azt használva nem volt gond.
Részemről jár neked a pont :D

ShuffleSource 2013.03.19. 17:10:35

@ShuffleSource: Őh az előzö paste lejárt, de most beregisztráltam és ez elvileg sose fog lejárni:
pastebin.com/3eucw0QY
Mellékelt ábra:
kepfeltoltes.hu/130319/matrix1_www.kepfeltoltes.hu_.png

nb · http://fersml.blog.hu 2013.03.20. 09:44:45

@ShuffleSource: lehengerlő, de a pont kigondolásához a forrásról is tudnom kell valamit, azzal mi a helyzet? Saját kód?

ShuffleSource 2013.03.20. 16:07:40

Tanár úr kódja, átalakítva, ott van a leírásban a link, de bemásolom ide is:
pastebin.com/JdizdqiJ

Tasnádi Dániel 2013.03.22. 10:57:52

@nb: Üdvözletem Tanár úr!
Jól értelmezem a legutolsó e-mailt, amit küldött és mindenki szerezhet pontot végtelen ciklusra, DOC bookra, stb. , amik már voltak feladatok?

Gabol91 2013.03.22. 11:02:00

@Tasnádi Dániel: Ez engem is érdekelne! Pontozása ugyanúgy zajlana, mint a kezdeti kiírásokban?

nb · http://fersml.blog.hu 2013.03.22. 11:24:52

@Tasnádi Dániel: igen, pontosan (bár a DocBook még amúgy sem volt full szerintem :)

nb · http://fersml.blog.hu 2013.03.22. 11:26:05

@Gabol91: igen, de mindig kell a "bizonyíték": forrás kép, adott esetben videó (ugye a tutorial videós mindig külön +pontot is jelet, mivel segíti a közösséget)

Tasnádi Dániel 2013.03.22. 11:31:18

@nb: Ennek igazán örülök. :)

B.Norbi93 2013.03.22. 23:20:35

LZW binfa C++-ban, Humán genom 2. kromoszómájára, + fa mélysége, mélységek átlaga, szórása.
hs_alt_HuRef_chr2.fa.gz fájlt előtte "fordítottam" az SVN-ben található d.c-vel 0-1 bitsorozatra, majd ezt használtam bemenetként. Bízom benne, hogy jól értelmeztem a feladatot, és a megvalósítás is jó:

Kód:
imagerz.com/QE8TWEtvAwMBXggZQwVR

Terminal:
imagerz.com/QE8TWEtvAwMBXggZQgVR

Ha minden OK, akkor 15 pont

nb · http://fersml.blog.hu 2013.03.23. 09:40:23

@B.Norbi93: miből adódik a 15 pont?

Maga az eredmény szerintem hibás... 900 körüli mélység nem dereng nekem. Ami azért lehet, mert a d.c akkor kell, amikor a karakteres dump-ot csináljuk, pl. a C-s LZW-hez, ami betűket dolgozott fel. Viszont (a védendő) z3a?.cpp progikba már eleve "be van építve" a d.c bitfaragása, így az binárisan dolgozza fel a bemenetét, azaz itt a dump előtte nyilván nem kell ezért.

B.Norbi93 2013.03.23. 15:18:54

@nb: Sejtettem, hogy ha valahol hibás lesz a feladat, akkor az a karakteres dumpos "fordítás" miatt lesz, mivel azt a részét a korábbi posztoknak nem igazán értettem :)

Módosítottam a programkódot úgy, hogy a z3a3.cpp szerint dolgozzon fel (a hs_alt_HuRef... fájlból első 10 megát levágjuk, és arra engedjük rá).

Viszont a szórás és az átlag meghatározásával kapcsolatban ismét szükségem lenne egy kis útmutatóra: ha jól értelmeztem a dolgokat, akkor a z3a3.cpp progiban csak azoknak a csomópontoknak az átlaga ill. szórása van meghatározva, amelyeknek nincs elemgyermeke:

if (elem->egyesGyermek() == NULL && elem->nullasGyermek() == NULL)
{
++atlagdb;
atlagosszeg += melyseg;

}

(szórásnál ugyanígy).

Ezzel szemben én az összes csomópontot figyelembe vettem. Tehát mindössze annyi kérdésem lenne, hogy az összes csomópont mélységének az átlagát ill. szórását kell meghatározni, vagy csak a fa végpontjainak az átlagát ill. szórását?

nb · http://fersml.blog.hu 2013.03.23. 15:26:15

@B.Norbi93: legalább a z3a7.cpp-t használd.

Az az elem, amelynek mindkét gyermeke NULL, vagy a C++-os verzóióban 0, ugye egy elvél elem, tehát egy ágnak a vége.

Tanulmányozd a képet:
m.cdn.blog.hu/pr/progpater/image/tomor/lzwpapir.jpeg
itt ugye 4 ág van: progpater.blog.hu/2011/03/05/labormeres_otthon_avagy_hogyan_dolgozok_fel_egy_pedat

nb · http://fersml.blog.hu 2013.03.23. 15:27:43

@nb: tehát az ágak átlagos hossza kell: összes ág hosszai összeadva és osztva az ágak darabszámával.

A szórás pedig ettől az átlagtól az eltérést jellemzi.

B.Norbi93 2013.03.23. 17:29:28

@nb: Így már akkor érthető az eltérés. Ezek alapján módosítottam a kódot, és az eredményt összevetettem immár a z3a7.cpp eredményével:

terminal:
imagerz.com/QE8TWUtvAwMBXg8eFAVQ

kód:
imagerz.com/QE8TWUtvAwMBXg8eFwVR

Van ennél szebb megvalósítás is, de inkább a megkezdett kódomat módosítgattam, aztán majd szépítgetem :)

nb · http://fersml.blog.hu 2013.03.23. 17:56:58

@B.Norbi93: ez az egész 2. kromoszómára van futtatva?

B.Norbi93 2013.03.23. 22:02:01

@nb: Nem, a cut.out progival levágtam az első 10 megát, de megcsináltam a teljes hs_alt_HuRef_chr2.fa fájlra is ('Gyönyör a tömör újratöltve' poszt alapján):

imagerz.com/QE8TWUtvAwMBXg5IRAVQ

A diff parancsot most nem tudtam futtatni (memory exhausted), de a fájlok mérete megegyezik (az enyém 3 bájttal nagyobb, gondolom a fájl végén az értékeknél lévő +3 karakterem miatt)

nb · http://fersml.blog.hu 2013.03.24. 10:21:50

@B.Norbi93: módosítsd a forrást esetleg, hogy ne nyomja ki a fát elég a végén a 3 számot, így nem lesz gondod a nagy fájlokkal bizonyosan.

B.Norbi93 2013.03.24. 12:32:38

@nb: Annyira nem vészes a dolog, a HDD-n végülis van hely, csak mountolni kell a D meghajtót. A tail paranccsal meg a lényeget elő lehet varázsolni (egyébként ez az eredmény már jó, nem?)

Továbbá, ha már el lett törölve a létszámkorlát is, akkor a kék Mandelbrot-hz.-t is benyújtanám:
progpater.blog.hu/2013/02/25/a_hatodik_labor_anyaga_szep_poszt/fullcommentlist/1#c19327295

smajdam 2013.03.25. 13:43:18

Volt egy olyan ajánlat, hogy be lehet menni kedden megnézni azokat, akik már dolgoznak az egyetemi projekteken, és az lenne a kérdésem, hogy akkor ez pontosan hánykor és hol lehetséges?

nb · http://fersml.blog.hu 2013.03.25. 13:48:06

@smajdam: Kedd, 16.00, Kari kutatóterem, I232.

Smajdam 2013.03.25. 18:43:53

@nb: hát sajnos zh-m lesz, szóval most nem tudok elmenni :/

Smajdam 2013.03.25. 20:36:53

@nb: lenne még egy olyan kérdésem a védéssel kapcsolatban, hogy a laboron említett függvény miért return-öli 'os'-t ?

friend std::ostream & operator<< (std::ostream & os, LZWBinFa & bf)
{
bf.kiir (os);
return os;
}

úgy értelmeztem eddig, hogy pl:

std::cout << a << b ; // tfh a és b LZWBinfák

esetén kell ez, mert ez így írható fel:

operator<< (operator<<(std::cout,a), b);

ha minden igaz. és ekkor a külső függvény első paramétere szintén az std::cout lesz, így a b-t is oda fogja kiírni. De csináltam egy példaprogit, hogy ezt leellenőrizzem, és return nélkül is ugyan így működik. akkor most teljesen más miatt kell a return? és ha igen akkor mi az ?

köszönöm!

nb · http://fersml.blog.hu 2013.03.25. 21:00:35

@Smajdam: van egy void-os eltolás túlterhelés, ha azt így próbálod használni:

binFa << '1' << '0';

fogod látni, hogy fordítási hiba lesz.

nb · http://fersml.blog.hu 2013.03.27. 16:27:05

@ShuffleSource: nekem ezzel:

norbi@colossus:~$ gcc bogo.c -o bogo
norbi@colossus:~$ ./bogo
Calibrating delay loop.. ok - 976.00 BogoMips

mi történik, ha -O3 opciós optimalizálással fordítjátok?

ShuffleSource 2013.03.27. 19:09:55

-O3 optimalizálással nem sikerül kiszámolni a programnak! ...failed:
kepfeltoltes.hu/130327/bogomips_www.kepfeltoltes.hu_.png

Megnéztem az assembly kódot és ha tippelnem kéne, azért történik ez, mert optimalizálás-képpen a fordító többször is kiszámoltatja a loops_per_sec értékét egy cikluson belül, aminek köszönhetően az (mivel önmaga is benne van a számítási feltételben) egyre kisebb részekre oszlik, majd a végén 0 lesz (mivel egész típusú, így elveszti a tört részét), ami hamis logikai értéke miatt nem teljesül a while feltétele, így a program tovább ugrik és hibával kilép!

Lehet teljesen zagyvaságot írtam, ez csak egy tipp...

ShuffleSource 2013.03.27. 19:12:11

@ShuffleSource: az assembly kód képét elfelejtettem linkelni: kepfeltoltes.hu/130327/bogo_asm_www.kepfeltoltes.hu_.png

Egyébként tanár úr mondta, hogy majd leírja ide kommentben, hogy mi kell ahhoz, hogy a kapott érték függjön a processzormagok számától!

nb · http://fersml.blog.hu 2013.03.27. 21:30:47

@ShuffleSource: jó improvizáció, nálam a progid:

norbi@colossus:~$ ./bogo
Calibrating delay loop..
ok - 1024.00 BogoMips per thread
ok - 1040.00 BogoMips per thread
ok - 880.00 BogoMips per thread
ok - 880.00 BogoMips per thread
ok - 880.00 BogoMips per thread
ok - 880.00 BogoMips per thread
ok - 880.00 BogoMips per thread
ok - 880.00 BogoMips per thread
result: 7344 BogoMips
threads: 8

miközben

norbi@colossus:~$ more /proc/cpuinfo
...
bogomips : 7200.05

azért néga 15.000-et ad. Elolvasom a kódodat is és lesz pát további javaslatom, +pontért persze :)

ShuffleSource 2013.03.27. 21:54:36

@nb: Epic win! :D Ennek örülök!
Várom a javaslatokat! :)

ShuffleSource 2013.04.01. 01:26:00

Ez eredetileg a 3. labor posztjához kéne, hogy menjen, de ide posztolom, mert annyira király lett!
Még én is meglepődtem magamon:

Kép:
kepfeltoltes.hu/130401/prog2_21_www.kepfeltoltes.hu_.png

Forráskód:
pastebin.com/GUtEcFYP

Megj: semmi netes kukázás, saját agyalás műve!

Esetleg plusz pont a hacker stílusért?

Tasnádi Dániel 2013.04.03. 03:13:27

@nb: Tiszteletem Tanár úr!

Ha jól értelmeztem az új játékszabályokat ezekre a megoldásokra kaphatok pontot:
(Jóváhagyásáig nem könyvelem el)

--- végtelen ciklusok (3 pont)

- 100% terhelő:
kepfeltoltes.hu/130403/terhel-2013-04-03-023006_1600x1600_scrot_www.kepfeltoltes.hu_.png

- alig terhelő:
kepfeltoltes.hu/130403/alig-terhelo-2013-04-03-014620_1600x1600_scrot_www.kepfeltoltes.hu_.png

--- régi prezi 105-ös fóliája (2 pont) :
kepfeltoltes.hu/130403/105--2013-04-03-025546_1600x1600_scrot_www.kepfeltoltes.hu_.png

--- másik könyv, chapter2 (1 pont):
kepfeltoltes.hu/130403/chptr-2--2013-04-03-024145_1600x1600_scrot_www.kepfeltoltes.hu_.png

--- vermes példa (3 pont):
kepfeltoltes.hu/130403/vermes--2013-04-03-024557_1600x1600_scrot_www.kepfeltoltes.hu_.png

fxr 2013.04.05. 10:24:59

Végtelen ciklusok (3 Pont):

100% terhelő:

kepfeltoltes.hu/view/130405/terhel1_www.kepfeltoltes.hu_.png

Alig terhelő:

#include <stdio.h>

int main()
{
for (;;)
{
int i;
int a;
sleep(1);
for ( i = 0; i != 100; ++i)
a *= i;
}
return 0;
}

nb · http://fersml.blog.hu 2013.04.05. 10:29:02

@fxr: emlékezz a laborra: "nem kell a kódokba a varázslás", lásd pl. a megoldások kapcsán a PP-t, konkrétan:

egyszer a main törzsében:
for(;;);

máskor:
for(;;) sleep(1);

és nem kell semmi más, i, a , magic 100, *= stb. :)

ShuffleSource 2013.04.06. 01:31:06

@nb:(Nyílt Forrású) Multi-Thread Exor cracker with nCurses by ShuffleSource (BETA v0.7)
Videó: www.youtube.com/watch?v=lgpIpeFPcUY
Forráskód: pastebin.com/dKrYAmks
Licensz: GNU GPL

Hmm talán kicsit túlbonyolítottam? :D
-Szépen tele-kommenteltem, hogy mindenki számára jól olvasható legyen!
-Jól optimalizált kód + OpenMP (Az órai kódnál kb. 50x gyorsabb)
-Jól paraméterezhető.
-A törés sebessége a fájl méretétől független.
-8 számjegyből álló kulcs törése ~1 perc.
-Alapértelmezett paraméterek mellett csak 1 találatot ad.
-Szépen kijelzi a folyamat előrehaladtát és kiszámolja a hátralevő időt

Be is zsebelném érte a pontot, mivel 3 nap munkám van benne.
Könyv/7.10.10: (3.5*) = 15.5 pont
Közös feladatok, államvizsga beugró kiírása: 9 pont
Összesen: 24.5 pont (ha lehet ilyet)

nb · http://fersml.blog.hu 2013.04.06. 10:36:52

@ShuffleSource: a videót néztem még csak, de ez alapján nem tartanám igazságosnak a 24.5 pontot. Mert ugye van ncurses-es spéci felület progress bar-al stb, így 35 pontot javaslok adni.

nb · http://fersml.blog.hu 2013.04.06. 12:43:14

@mamenyaka: @ShuffleSource: lássuk, a puding próbája az evés!

(Aki nem ismerné "mamenyaka" kollégánkat, elég annyit tudnia előzetesen, hogy Ő CUDA-val is törte az exort :-)

mamenyaka (törölt) 2013.04.06. 13:05:09

A CUDA-s EXOR törő (meg más egyéb is) itt található:
github.com/mamenyaka?tab=repositories

ShuffleSource 2013.04.06. 14:30:37

@mamenyaka: Gratulálok az Exor törődhöz! Sajnos nem tudom kipróbálni, mivel AMD videokártyám van. :S

@nb: köszönöm szépen!

Egyébként az enyém nem csak számokból álló kulcsal tör! a -k indítási paraméter szabályozza a kulcs típusát. Ezek a lehetőségek vannak (de könnyen bővíthető):
* 0: számok, betűk és speciális karakterek
* 1: csak számok
* 2: csak kisbetűk
* 3: csak nagybetűk
* 4: kis- és nagybetűk
* 5: kis- és nagybetűk és számok
* 6: bináris
* 6: hexadecimális (nagybetű)

Az egész titka egy olyan függvény ami decimálist bármilyen "számrendszerbe" váltja át. A számrendszer számjegyeit egy stringben kel megadni. Innen csak annyi hogy számrendszernek megadjuk pl:
charSet = "abcdefghijklmnopqrstuvwxyz";

a függvény pedig:
//kulcs generálása decimális számból
string generateKeyFromSeed(register long long prevKey){
if(prevKey == 0) return "0";
int base = charSet.length();
string result = "";
do{
result.push_back(charSet[prevKey%base]);
prevKey /= base;
}while(prevKey != 0);
return string(result.rbegin(), result.rend()); //string megfordítása
}

Innestől már csak egy egyszerű számláló kell, amivel mindig meghívjuk ezt a függvényt!

ShuffleSource 2013.04.06. 15:31:48

@mamenyaka:
- EXOR Challenge -
Fájl: secret4
Futási idő: 46 mp (a CUDA-snak mennyi? :D)
Kulcs: 65734643
Videó: www.youtube.com/watch?v=nzJgITuMut0

mamenyaka (törölt) 2013.04.06. 17:45:44

@ShuffleSource:
Nagyszerű! Simán megérdemel a programod még jópár pontot plusszba.
Bár érdekes ahogy talál vagy egymillió kulcsot, esetleg nézd meg a saját szűrőmet, mert az ilyen méreteknél csak 1-et talál.

A CUDA futási ideje:
kepfeltoltes.hu/130406/exor_www.kepfeltoltes.hu_.png

ShuffleSource 2013.04.06. 19:30:46

@mamenyaka: Köszi! Egyébként hasonló időt vártam a CUDA-tól... Talán később én is bepróbálkozom vele!

Amúgy az a sok lehetséges kulcs amit ír, csak a gyorsvizsgálaton átesett kulcsokat mutatja, melyekkel érdemes később részletes vizsgálatnál foglalkozni.

Sok apró trükköt bevetettem a sebesség érdekében, pl: gyorsvizsgál csak a fájl első 300 karakterét vizsgálja (ezt felül lehet bírálni a -x kapcsolóval).

A részletes vizsgálatot azért nem látod, mert az a viszonylag kevés kulcs miatt pillanatok alatt lefut!

Kíváncsiságból kipróbáltam, hogy gyorsvizsgálatkor is a teljes (secret4) fájlt vizsgálom (-x -1), ekkor 450 percet írt várható futási időnek.

Cvanger 2013.04.09. 23:52:20

Úgy látom a pagerank-ra még beférek:
kepfeltoltes.hu/130409/pagerank_www.kepfeltoltes.hu_.png
7 pont
illetve a QT-s életjátékra
kepfeltoltes.hu/130409/eletjatek_www.kepfeltoltes.hu_.png
20 pont

Össz: 27 pont

B.Norbi93 2013.04.10. 16:42:50

Egyelőre bizonytalan vagyok a robotfocis témában, hogy mit-merre-hogyan kell csinálni, de az agent2D-hez beállítottam az Aranycsapat felállását, nem t'om ezért jár-e pont :)

Before KO: imagerz.com/QE8QW0tvAwMBB1weRAVQ
Set to play: imagerz.com/QE8QW0tvAwMBB1weRwVQ

nb · http://fersml.blog.hu 2013.04.14. 11:24:55

#include <iostream>
#include <cstring>

int
main ()
{

char a[] = "alma";

if (std::strcmp (a, a))
std::cout << "1- strcmp nem nulla" << std::endl;

if (!std::strcmp (a, a))
std::cout << "1- strcmp nulla" << std::endl;

if (std::strcmp (a, a) == true)
std::cout << "1- ShuffleSource" << std::endl;

char b[] = "korte";

if (std::strcmp (a, b))
std::cout << "2- strcmp nem nulla" << std::endl;

if (!std::strcmp (a, b))
std::cout << "2- strcmp nulla" << std::endl;

if (std::strcmp (a, b) != true)
std::cout << "2- ShuffleSource" << std::endl;

return 0;
}

de a bool-ok esetén az == az if-ben eleve zavaró.

nb · http://fersml.blog.hu 2013.04.14. 11:25:54

@nb: s itt jön az eleje, mert nem engedte beküldeni:

@ShuffleSource: include-os részben vagy ez

www.cplusplus.com/reference/cstring/strcmp/

vagy ha maradna a C stílus, akkor a man alapján:

STRCMP(3) Linux Programmer's Manual STRCMP(3)

NAME
strcmp, strncmp - compare two strings

SYNOPSIS
#include <string.h>

int strcmp(const char *s1, const char *s2);

kéne a stringes nevek beemelése.

Bár nyilván csak egy "kontroll progiba", mert itt Te magad írsz meg pár függvényt. De ekkor is érdemes figyelni, hogy ne használj más szignatúrákat, mint amelyeket a programozók megszoktak a fenti két említett referencia alapján, mert ha Ők majd adott esetben a Te implementációdat használnák, akkor is felteszik, hogy a működésük (pl. mit ad vissza ismert) s egy ilyen reflexből megírt kód mutatja, hogy ez nem így van:

RunOfTheMill 2013.04.23. 23:20:04

Készítettem én is egy XOR-törő programot, valamivel talán bizonytalanabb, mint a gyakorlaton bemutatott megoldás. Rövidebb szövegeknél gyakran előfordul hibás eredmény, cserébe viszonylag gyors és hosszabb szövegek esetén nagyrészt megbízható.
Egy képernyőkép, alul a time kimenete: runofthemill.uw.hu/xor.png
Itt pedig a forráskód: runofthemill.uw.hu/xor_crack.cpp
Van továbbá egy életjátékom is rajzolható sejttérrel.
Képernyőkép: runofthemill.uw.hu/eletjatek.png
Itt pedig a projekt fájljai és pár elmentett sejttér: runofthemill.uw.hu/GameOfLife2.tar.gz

nb · http://fersml.blog.hu 2013.04.24. 11:05:24

Javítsd ki a

www.inf.unideb.hu/~nbatfai/z3a7ek.cpp

progiban ezt:

valgrind --leak-check=full ./z3a7ek z3a7ek.cpp -o kimenet

...

==3883== HEAP SUMMARY:
==3883== in use at exit: 265,512 bytes in 11,063 blocks
==3883== total heap usage: 11,067 allocs, 4 frees, 283,032 bytes allocated
==3883==
==3883== 120,768 (24 direct, 120,744 indirect) bytes in 1 blocks are definitely lost in loss record 1 of 4
==3883== at 0x4A05F97: operator new(unsigned long) (vg_replace_malloc.c:261)
==3883== by 0x4015EB: LZWBinFa::operator<<(char) (in /home/norbert/Downloads/z3a7ek)
==3883== by 0x4012C1: main (in /home/norbert/Downloads/z3a7ek)
==3883==
==3883== 144,744 (24 direct, 144,720 indirect) bytes in 1 blocks are definitely lost in loss record 4 of 4
==3883== at 0x4A05F97: operator new(unsigned long) (vg_replace_malloc.c:261)
==3883== by 0x401572: LZWBinFa::operator<<(char) (in /home/norbert/Downloads/z3a7ek)
==3883== by 0x4012D4: main (in /home/norbert/Downloads/z3a7ek)
==3883==
==3883== LEAK SUMMARY:
==3883== definitely lost: 48 bytes in 2 blocks
==3883== indirectly lost: 265,464 bytes in 11,061 blocks
==3883== possibly lost: 0 bytes in 0 blocks
==3883== still reachable: 0 bytes in 0 blocks
==3883== suppressed: 0 bytes in 0 blocks

szelepsapka 2013.04.24. 11:28:51

szerda 10:00-s laboron:

robotfoci saját felállás: 8pont

I.Csaba 2013.04.25. 17:58:17

en is alkottam egy exor-os toro-t, max 8 kulcsot tud torni
7.10.10 -es feladat 15,5 pont

forras kod: pastebin.com/MKS1svQ9
mukodes kozben: kepfeltoltes.hu/130425/kodtoro_www.kepfeltoltes.hu_.png

valamint neveznem a C++ valtozatra is igy +9pont

osszesen 165 pontom lesz igy

Cvanger 2013.05.01. 09:29:05

Kissé késve, de itt a Conway-féle életjáték, melyet már az 5. labor idején megcsináltam, de nem tudtam, hogy pontot is ér, ezért kerül ilyen későn fel. Ahogy néztem még belefér. + 20 pont
kepfeltoltes.hu/130501/Screenshot_from_2013-05-01_09_25_37_www.kepfeltoltes.hu_.png

Tasnádi Dániel 2013.05.17. 15:34:20

Pár feladat,ami eredetileg a második laborra volt feladva:
(A KÖNYV 113 oldali feladatai: 1-től 7-ig, pontozásuk most: (*SZAM -1) * 3 + 1)

1.feladat, (*2) --> 4 pont
kepfeltoltes.hu/130517/2-1-4pont_www.kepfeltoltes.hu_.png

3.feladat, (*1.5) --> 2.5 pont
kepfeltoltes.hu/130517/2013-04-23-215806_1600x1200_scrot_www.kepfeltoltes.hu_.png

4.feladat, (*1.5) --> 2.5 pont
kepfeltoltes.hu/130517/a_www.kepfeltoltes.hu_.png
kepfeltoltes.hu/130517/b_www.kepfeltoltes.hu_.png

Tasnádi Dániel 2013.05.17. 15:35:04

5.feladat, (*2) --> 4 pont
kepfeltoltes.hu/130517/d_www.kepfeltoltes.hu_.png

6.feladat, (*1) --> 1 pont
kepfeltoltes.hu/130517/e_www.kepfeltoltes.hu_.png

Mindezekkel együtt eddig gyűjtött pontjaim száma = 103

Mire-mennyit lista:
www.dropbox.com/sh/l5qfvzavrazoe79/vGMQq0hE0B

Scrop 2013.05.19. 19:07:18

Asszem az utolső pontösszesítőm :
docs.google.com/file/d/0By5wCYSBTSJASHU5WkY2NmUyN2s/edit

Összesen, ha jó a QCSS em akkor : 347,5 pont

B.Norbi93 2013.05.22. 18:31:52

Kicsit "továbbvittem" ShuffleSource LogoConverterét, úgy csináltam meg, hogy az arányokat is megtartsa a logóknál (remélhetőleg még nincs ilyen verzió :) )

mainwindow.cpp
pastebin.com/FC9YagSc

mintakép
imagerz.com/QE5HDEtvAwMBAlpJRQVQ

Remélem nem gond, hogy nem saját tervezésű logókat raktam be a csapatnak, és akkor eltennék érte 20 pontot :)

andr_design 2013.05.23. 01:38:12

saját tervezésű (elég egyszerű) csapatlogo

kepfeltoltes.hu/130523/csapatlogoandr_design_www.kepfeltoltes.hu_.png

20 pont (ha még elfogadja tanár úr)

B.Norbi93 2013.05.23. 23:09:57

Nekem is az utolsó pontgyűjtős kommentem:
KÖNYV 5.9.12 (9 pont)
pastebin.com/h4Qgj2cw

Saját logót is terveztem, csak hogy a 20 pont biztosan meglegyen :)
imagerz.com/QE5HDUtvAwMBAlkYEAVQ

DocBook: 25 + 24*4 = 121 pont (a 6.6.3 és a 6.6.12 feladatot külön feladatnak számoltam)
xml:
www.dropbox.com/s/cpq9vlhnr3s5ybr/feladatok.xml

pdf:
www.dropbox.com/s/rsnb10j7u17cqjl/feladatok.pdf

Végül pontösszesítés:
www.dropbox.com/s/h6uf5z4j6frje3i/pontok.ods
(az utolsó két sor azért van üresen, mert nem tudom, hogy jár-e érte valami pont)

andr_design 2013.05.24. 00:07:20

2. Pagerank c változatának átírása c++-ra ( 7 pont)

kepfeltoltes.hu/130523/pagerank_andr_design_www.kepfeltoltes.hu_.png

3. Saját grafikus megjelenítő írás Quantum Consciousness Soccer Simulator-hoz ( 35 pont)

kepfeltoltes.hu/130523/Kvantummegjelenitosajat_www.kepfeltoltes.hu_.png (nem csináltam video-t mert még év elején csináltam tutorialt arról hogyan telepítettem az egészet, amely az alábbi linken még mindig elérhető:www.youtube.com/watch?v=YRoDIW_Iyko

4. KÖNYV 5.9.5 ( 6,5 pont )

kepfeltoltes.hu/130523/meret_www.kepfeltoltes.hu_.png

5. KÖNYV 5. 9. 4. ( 4 pont )

kepfeltoltes.hu/130524/csere_www.kepfeltoltes.hu_.png

nb · http://fersml.blog.hu 2013.05.24. 14:54:42

@B.Norbi93: de bizony gond! De most elég, ha tudod, hogy gond, hiszen ha jól értem, akkor csak a kipróbáláshoz használtad fel. Ha ismert logókat akarsz majd a prog2-ben felhasználni, akkor nézz utána a felhasználhatóságuk szabályozásának, de a látott fociklubok kapcsán szinte biztosan kizárt, hogy használhatod őket.

B.Norbi93 2013.05.24. 15:54:48

@nb: Természetesen nem akartam a csapatomat fémjelezni a logókkal, csak illusztrációnak szántam őket :)

ShuffleSource 2013.05.24. 17:31:38

@B.Norbi93: Amit csináltál szép, csak fölösleges! Egy sor átírásával a program megtartja az arányokat!
Ebből:
img = new QImage(imgA.scaled(256,64));
Ez:
img = new QImage(imgA.scaled(256,64,Qt::KeepAspectRatio));

Érdemes megnézni a referenciát mielőtt fölös munkát csinálsz magadnak!

qt-project.org/doc/qt-4.8/qimage.html#scaled

qt-project.org/doc/qt-4.8/qt.html#AspectRatioMode-enum

B.Norbi93 2013.05.24. 18:17:16

@ShuffleSource: Valóban, az arányt meg lehetett volna oldani így is, de azért nem csak ennyit kellett átírni ;)
imagerz.com/QE5HDktvAwMBAlhKEAVQ

andr_design 2013.05.25. 00:00:29

@nb: Üdvözletem Tanár úr!

láttam hogy a pont listában +20-at kaptam a logóért, viszont utána még belinkeltem pár dolgot amit megcsináltam. Azért járni fog még valami esetleg pontszámilag vagy már nem? (még tegnap küldtem itt van 3-4 kommenttel feljebb)

Köszönöm válaszát!

andr_design 2013.05.25. 00:05:41

@nb: láttam hogy le van zárva a verseny, csak azért kérdeztem hogy esetleg Tanár úr nem látta a komentemet vagy ilyesmi, de ha nem jó a feladat akkor tárgytalan természetesen.

B.Norbi93 2013.09.17. 15:47:21

Aktuális poszt híján ide írom:
Java LZW BinFa:

Forrás:
pastebin.com/C2czzrTQ

kimenet (balra a CPP, jobbra a Java kimenete):
imagerz.com/QE5PW0tvAwMCUF9FRQVQ
süti beállítások módosítása