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

Sillabusz - "you'll be interested to know that the Italian navigator has just landed in the new world"*

2013.02.19. 11:15 nb

Kedves Hallgatók, Laborvezetők!

Megszületett a várva-várt "interkurzus" megállapodás, bár a sillabuszt még nem tudtam frissíteni, de íme a lényeg a közös számonkérés kapcsán:

  • mindhárom kurzus bead 16 feladatot március 15-ig a közösbe
  • a közös feladatokból történő beszámolás a laboraláírás feltétele

(néhány részletet majd küldök magánban a Neptunban). Ennek a beszámolásnak a lebonyolítása, maga a kurzus és a vizsgák már a kurzus saját belső hatáskörébe tartoznak.

Laws of the game

Jöjjenek most az idei játékszabályok, ahol feszültség van a sillabusz és a jelen szereplők között, ott ez a poszt az irányadó! Először is a nyelv C++ lesz (Retreat, Hell**)!!! Ennek kapcsán tankönyvként két könyvet mérlegeltem:

Az első mellett az szólt, hogy abszolút a kezdőket célozza és sokkal populárisabban van megírva, mint a második, amely jóval szakmaibb a kezdő olvasónak. Viszont a második magyarra is le van fordítva, míg az első még angolul sincs meg az ország egyetlen könyvtárában sem... Hoppá! (Most megrendeltem, de ez az idén már nem számít.) Az elsőhöz van fóliasó, a második számos példányban elérhető a könytrárban... tehát nem egyszerű a választás. Illetve ajánlható könyv még a Szoftverfejlesztés C++ nyelven c. könyv. S persze az alap C könyv, a K&R.

Azt próbáljuk ki, hogy az előadás fő sodorvonalát az említett 2. könyvből (a továbbiakban csak KÖNYV) vetítjük, s ezt esetlegesen kiegészítjük a korábbi fóliasónkkal. A laborok munkáihoz pedig esetlegesen fellapozhatjuk a többi említett könyvet, vagy adott példánál a Páternosztert (a továbbiakban PP), illetve az alábbi könyvek valamelyikét.

A laborok

A laborok anyaga közös minden laborra, s előre ki fogom tenni őket ide egy poszt formájában, most az ismert okból nyilván van egy kis késés. Illetve a laborok alapszerkezete is közös: a laborvezető szúrópróba szerűen ellenőrzi, hogy a hallgatók olvasták-e a kötelező olvasmányt (ha nem, akkor egy fél hiányzást könyvelünk el), majd közösen feldolgozzák az aktuális poszt tartalmát. Nincs semmilyen papíros ZH, hanem a laborközösség előtt 2 programot kell védeni, az egyiket (humán genomos) a félév közepén, a másikat (robot- vagy kvantumfocis) a félév végén. Illetve a közös kötelezettségnek eleget téve az utolsó 5 labor valamelyikén a hallgató 3-at húz a közös feladatokból és ezekből az egyiket kell megoldania/bemutatnia a helyszínen (természetesen bármit használhat e közben is, mint ahogyan bármely számonkéréskor a kurzusban). A két sztenderd védés és a közös védése is ismételhető persze.

Jegymegajánlás

Létezik hagyományosan: az adott határidőig legtöbb pontot gyűjtő hallgató jelest kap. A feladatok pontszáma itt lesz a blogon, illetve a laborvezető a labormunkát serkentő felajánlásokat tehet, pl. "az első 3 aki megcsinálja, 4 pontot kap". A posztokban adott feladatok hatóköre az adott hét (de figyeld a kommenteket, mert ha mást nem mondunk, akkor mindig az első hármat pontozzuk), a laborvezetők által kiadott az adott nap. Nincs központi pontnyilvántartás, hanem elosztva: minden hallgató tartson nyilván magára egy "mikor, mennyit, mire" táblázatot és ha elszámolási vita van, akkor ezt kell elküldenie nekem. Illetve amikor valaki pontot szerez, az egy kommentben aktuálisan jelezze és ezeket fogom időszakosan itt jobb oldalon szerepeltetni. Egy pont két fél-hiányzást válthat ki, nem fizikai hiányzást, hanem olvasmány vagy feladat nem tudási "fél hiányzást".

Hallgató is pontoz hallgatót

A kurzus közösségét erősítendő: aki a posztok kommentjeiben kérdez és kielégítő választ kap, az a választ adónak adhat egy pontot! (Ha elfogadjuk persze, szóval valódi kérdés, valódi válasz kell nyilván.)

Binom rendszer

A laborközösségben mindenkinek legyen egy párja, akivel "együtt" olvassa a könyvet, a feladatok egy részét együtt készíti.

További kedvezmények
  • 100 pont felett: +1 jegy az elégtelentől különböző írásbelin vagy szóbelin, a szóbelin 3 tétel elkerülhető.
  • 200 pont felett: +1 jegy az elégtelentől különböző írásbelin vagy szóbelin, a szóbelin a tételek fele elkerülhető.
  • 300 pont felett: +2 jegy az elégtelentől különböző írásbelin vagy szóbelin, a szóbelin 2 tételből kell húzni.

Az első labor

Ismerkedjünk meg a teremmel, milyen szoftverek vannak stb. Ha valamit hiányolunk (szövegszerkesztő, IDE stb), jelezzük és kérjük a rendszergazdáktól. Itt egy virtuális VB image, amiben minden menni fog: Batfai_Prog1

(Ezen a héten a csúszás miatt az esetleges feketéket ("fél-hiányzás") még ne könyveljük.) A KÖNYVből olvassuk el a (18-i) hétre

  • a 3-25 oldalt
  • a 25-37 oldalt

együtt e két blokkból mindenki 3 olyan dolgot kérdezzen meg a binomjától, amelyet nem ért, a binom pedig próbáljon meg válaszolni. A szúrópróbaszerű ellenőrzésen ezt a levélváltást kell bemutatni a laborvezetőnek. Globális ellenőrző kérdések:

  • C++-ban bevezethetünk-e változót például a for utasításban?
  • mond-e olyat a szerző, hogy a K&R C könyv minden progija C++ progi?

Az első labor feladatai, poszt-pontjai

Az a gyakorlat, hogy aki előre elvégzi a laborra tervezett feladatokat, az megkapja a pontot, s ettől függetlenül a laboron mehet a bajnokság a feladatok kapcsán.

  • Vegtelen feladat: C vagy C++ végtelen ciklust írj! A legszebb (ezt a laborvezető saját szempontjaiból zsűrizi) 3 1 pont.
  • Kétféle végtelen: írj két végtelen ciklust, az első alig pörgesse a procit, a második 100%-on (a top paranccsal ellenőrizendő a CPU használat, ha több mag van, akkor press '1' benne). (help PP 27. oldaltól) Az első 3 3 pont.
  • Az első celebráció: aki a PP 25 szohossz.c progiját elmagyarázza a laborközösség előtt, annak 5 pont üti a markát.
Opcionális feladatok
  • Másik könyv, chapter 2: egy pont, aki lefordítja, lefuttatja a 2. fejezet progiját.
  • 105: válaszold meg a "régi" prezi 105. fóliáját! (2 pont) /help/
  • 106: válaszold meg a "régi" prezi 106. fóliáját! (2 pont)
  • 107: válaszold meg a "régi" prezi 107. fóliáját! (2 pont)
  • KÖNYV 25 oldal: gépen próbáld ki Stroustrup könyv 25. oldalán kezdett vermes példát 3 pontért:
    stack.h
    namespace Stack // felület
    {
    void push ( char );
    char pop ();
    }
    stack.cpp
    namespace Stack // megvalósítás
    {
    const int max_size = 200;
    char v[max_size];
    int top = 0;
    
    void push ( char c )
    {
      /* túlcsordulás ellenõrzése NÉLKÜL és c behelyezése */
      v[top++] = c;
    }
    char pop ()
    {
      /* alulcsordulás ellenõrzése NÉLKÜL és a legfelsõ elem kiemelése */
      return v[--top];
    }
    }
    

    user.c
    #include "iostream"
    #include "stack.h"
    
    int
    main ()
    {
      Stack::push ( 'c' );
      if ( Stack::pop () != 'c' )
        std::cout << "lehetetlen";
    
      return 0;
    }
    norbi@colossus:~/Documents/P1$ g++ stack.cpp user.c -o user
    norbi@colossus:~/Documents/P1$ ./user
    norbi@colossus:~/Documents/P1$

Lényeges, hogy ne essünk pánikba! Különben pedig: "Imádni fogjátok a C++-t, egy emberként, tiszta szívből 4"***. Kapcsoljátok be a gépet, mehet a zene és végre indulhat a programozás!!!

*: Enrico Fermi: http://en.wikipedia.org/wiki/Enrico_Fermi

**: szinkron: "Vissza? Soha!", http://www.imdb.com/title/tt1217613/, Battle Los Angeles

***: "Imádni fogják a légiót, egy emberként, tiszta szívből", www.imdb.com/title/tt0126388/

110 komment

A bejegyzés trackback címe:

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

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.

szelepsapka 2013.02.19. 20:28:49

Tehát addig olvas a data source-ból amíg nem kap EOF-ot, és a beolvasott karaktereket ki is írja a képernyőre.

nb · http://fersml.blog.hu 2013.02.19. 20:29:13

@szelepsapka: elegánsan mondjuk így: a progi a bemenetét a kimenetére másolja.

nb · http://fersml.blog.hu 2013.02.19. 20:31:10

@nb: a wikipediát majd felejtsük el abban az értelemben, hogy Ti lesztek a szakértők, azaz ne olvassátok, hanem írjátok, pl. a kurzusban pár hét múlva ezt: hu.wikipedia.org/wiki/Alternat%C3%ADv_tabella

Gabol91 2013.02.19. 20:35:29

(szelepsapka, nemér, én is megcsináltam, csak nemtudtam h ide kell írni..én most akkor nem kapok pontot?:D )

Az elmaradt labor kapcsán pedig ezt a ciklust mutatnám fel:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

using namespace std;

int main ()
{

for(;;){

int randomNumber = rand() % 2;

printf("%d ", randomNumber);
}

return 0;
}

(1 pont)

szelepsapka 2013.02.19. 20:39:46

#include <stdio.h>
#include <stdlib.h>
int
main (void)
{
int i, r;
for (i = 0; i < 1000; ++i)
{
r = -10 + (int) (21.0 * rand () / (RAND_MAX + 1.0));
printf ("%d ", r);
}
printf ("\n");
return 0;
}

(1pont)

nb · http://fersml.blog.hu 2013.02.19. 20:51:22

@Gabol91: benne vagy az első 3-ban, nincs gond. (A kurzusban minden nyilvános, ezért kell ide küldeni, hgy MINDENKINEK EGYÜTT KELLJEN ÉLNI A JÁTÉKKAL, azaz tudni ki-mit küldött, mikor stb.)

A ciklusodba: miért kell a for utas testében az a varázslás?

nb · http://fersml.blog.hu 2013.02.19. 20:57:11

@szelepsapka: biztos átgondoltad, de a prog1-ben nem gondolkozunk, programozunk, azaz ilyesmivel teszteled kicsit:

#include <stdio.h>
#include <stdlib.h>
int
main (void)
{
int r;
for (;;)
{
r = -10 + (int) (21.0 * rand () / (RAND_MAX + 1.0));
if (r < -10 || r > 10)
break;
}
printf ("%d\n", r);
return 0;
}

Gabol91 2013.02.19. 21:13:16

@nb: Mármint, milyen varázslás? A for loop-ot használtam, és a feladat kiírásának szerettem volna megfelelni ("A legszebb (ezt a laborvezető saját szempontjaiból zsűrizi) .") a nullákkal és egyesekkel. Látványos,nem?:) De gondolom akkor ezek szerint a kód szépsége a lényeg,a megoldás módja, nem hogy mit produkál.

celticfrost 2013.02.19. 21:26:35

#include <stdio.h>
#include <stdlib.h>

int main()
{ int i;

i = 2;
while (i>1)
printf("haha");

return 0;
}

Tehát akkor az első 3 ember lesz pontozva feladatonként? Nem igazán értem, mindegy megpróbáltam :D .

(1 pont)

DeeGort 2013.02.19. 21:32:28

Megcsináltam az alig terhelő és a 100%-osan terhelő végtelen ciklust:
Sajnos screenshotot nem tudok adni mert olyan helyen vagyok ahol nagyon lassú a net és a képfeltöltés megadta magát.

// Alig terhelo
#include <iostream>
using namespace std;

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

// Erosen terhelo
#include <iostream>
using namespace std;

int main()
{
for(;;) {}
return 0;
}

DeeGort 2013.02.19. 21:36:02

@DeeGort: alig_proci néven fut, eredetileg külön project lett volna de lusta voltam végül külön új projectet neki nyitni.

DeeGort 2013.02.19. 21:38:34

@DeeGort: Hopp, úgy látom sikerült kétszer ugyanazt le printscreenelni.

Matthew03 2013.02.19. 22:01:37

első celebráció:
Na, ahogy néztem a progi csak megnézi hány bit hosszúságot tud kezelni a géped.
A h 0-ról, az n 01-ről indul.
Kiírás:
n=0x01=0x1 (1 bit) [1 1] és a while-ban n=0x10 lesz.(n nem nulla ezért folytatja a ciklust)
n=0x10 (2 bit) [2 2] és a while-ban n=0x100 lesz.
n=0x100 (3 bit) [3 4] és a while-ban n=0x1000 lesz.
n=0x1000 (4 bit) [4 8] és a while-ban n=0x10000 lesz.
.
.
.
és így tovább míg el nem jut addig a bit számig amit már nem tud kezelni a gép
n=0x10...0 (i bit) [i 2^(i-1)] a while feltételében n=0x10..0-ból n=0x0...0 lesz ami nulla így hamis a feltétel és kilép a ciklusból. h=i lesz és ez a bitszám amit a géped kezelni tud alap esetben.

Matthew03 2013.02.19. 22:04:27

végtelen ciklus:(nem terheli a procit nagyon)
#include <stdio.h>
#include <stdlib.h>

int main()
int a=0,i;
{
for(i=5;i<5;i++)
{
a=a+i;
}
return 0;
}

Matthew03 2013.02.19. 22:10:00

-10 és +10 generátor átírása annyi, hogy az srandnak a kezdőértékét -10re állítjuk és 20 at írunk számolási értéknek. így -10 től +10 ig számol

Matthew03 2013.02.19. 22:16:57

@Kovács Máté Olivér: most látom, hogy ez még a kanyarba se jó

Matthew03 2013.02.19. 22:22:11

((végtelen ciklus a rossz))

Matthew03 2013.02.19. 22:24:54

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
int a=0,i;
for(i=4;i<5;i--)
{
printf("asd");
}
getch();
return 0;
}

Ez a jó végtelen ciklus

Gabol91 2013.02.19. 23:13:33

Még a 2 ciklusra lehet pályázni 3 pontért?
1.)
int main()
{
while(1)
{
Sleep(1);
}
return 0;
}
//nem terheli

és:
2.)
int main()
{
while(1)
{
Sleep(0);
}
return 0;
}
//terheli

cellSigma 2013.02.19. 23:14:41

Végtelen ciklus 3 pontért:
nagyon terheli a procit:
//nagyon.c
#include <sys/time.h>
#define PI 3.1415926

float myfoobar(void);
int main(){
int i;
float a=1.0;
struct timeval tv;
tv.tv_sec=1;
tv.tv_usec=0;
while(1){
select(0,0,0,0,&tv);
for(i=0;i<9000000;++i) a*=myfoobar();
}
return 0;

}

float myfoobar(void){return PI;}
Kép: tinypic.com/r/mltwcw/6

Kevésbé megterhelő:
//alig.c
#include <sys/time.h>
#define PI 3.1415926

float myfoobar(void);
int main(){
int i;
float a=1.0;
struct timeval tv;
tv.tv_sec=1;
tv.tv_usec=0;
while(1){
select(0,0,0,0,&tv);
for(i=0;i<9000000;++i){printf("i'm here!\n"); a*=myfoobar(); printf("play!\n");}
}
return 0;

}

float myfoobar(void){return PI;}

Kép: tinypic.com/r/33nb9g8/6

cellSigma 2013.02.19. 23:18:04

Valamint a legszebb végtelenciklus versenyre nevezném 1 pontért őt:

int main(){
while(" do I get my point for this?");
return 0;
}

Gabol91 2013.02.19. 23:18:40

@Gabol91: Hmm, a 2.)-t javítanám erre:
int main()
{
int i=0;
while(!i)
{
Sleep(0);
}
return 0;
}
//terheli (3 pont?)

szelepsapka 2013.02.19. 23:23:06

@nb: így már jónak tűnik.....

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

using namespace std;

int main ()
{
int i;

for(i=0;i < 1000; ++i){

// std::snprintf(buf, 64, "%d\0", (int)(180.0 * std::rand() / ( RAND_MAX + 1.0)));

int r = (int) (21.0 * rand() / (RAND_MAX + 1.0)) -10;

if(r<-10 || r>10)
break;
else
printf("%d ", r);
}

return 0;
}

szelepsapka 2013.02.19. 23:26:03

@szelepsapka: a ki kommentelt sor véletlenül került oda, csak kicsit előre haladtam az anyaggal és valószínüleg valamilyen figyelmetlenség folytán került bele az is

szelepsapka 2013.02.20. 00:10:06

@szelepsapka: vissza vonom, idővel rájöttem, hogy mégse tünik jónak.

Cvanger 2013.02.20. 02:01:28

Én is azt hittem, hogy majd órán lesznek ellenőrizve a feladatok, ezért írom őket ilyen későn, de hátha lesz még értük pont.

1.) "régi" prezi 106-os: számokat kér be, de 1 karakter egészrésszel rendelkező lebegőpontos számként tárolja el, majd ha CTRL+D, akkor kiírja az átlagukat szintén 1 karakter egészrésszel formázva.

Könyv 25. oldalán lévő kód fordítására kép:
kepfeltoltes.hu/130220/stack_www.kepfeltoltes.hu_.png

Első celebráció: A program megnézi, hogy mekkora az int típus mérete, mert általában az meg szokott egyezni egy gépi szó hosszával, de nem mindig, pl. nálam 64bites hardveren és szoftver kombón is csak 32-t ír, ez valószínűleg a GCC fordító miatt van, aminek a -m32/-64 kapcsolóval lehetne megadni, hogy milyen rendszerre fordítson, bár nekem nem működött. A lényeg, hogy a program addig shifteli balra a kezdetben legjobboldalt lévő 1-st, amíg az "ki nem csúszik teljesen", így az n változó a shiftelés során jobbról bemászó 0-kal van tele, ami 0-t jelent, ami a hamis értéke így kilép a while.

A "másik könyv" Chapter 2 lefordításához a chapter.2.6.cpp-be az első #include után be kellett szúrni a következő includot is: #include <iostream> , amire a cout-nak volt szüksége. Itt a kép: kepfeltoltes.hu/130220/chapter2_www.kepfeltoltes.hu_.png

ShuffleSource 2013.02.20. 08:36:58

for(i=0;i<10;++i)

és

for(i=0;i<10;i++)

között futás szempontjából nincs különbség, mivel az inkrementációs lépés mindig egy adott ciklus végén helyezkedik el.

Megfelel:
int i=0;
while(i<10){
i++; //++i;
}

Ez látszik a for ciklus folyamatábráján:
hu.wikipedia.org/w/index.php?title=F%C3%A1jl:For-loop-diagram.png&filetimestamp=20081116182724

PHP_Barbar 2013.02.20. 08:40:06

Az órán elhangzott feladatra.
Az ++i előtte növeli egyel az i értékét, szóval ha az i értéke 0, akkor egyről kezdi a ciklust.
Az i++ pedig a for ciklus után növeli egyel az i-t, tehát a növelt értékével tér vissza.

Codared 2013.02.20. 08:40:25

Feladat megoldás 1. előadás: Ha jól tudom a ++i -nél először növeli az értéket aztán végzi el vele a műveletet i++ -nál pedig elvégzi a műveletet i-vel és utána növeli.

Cvanger 2013.02.20. 08:46:24

A ++i először inkrementál, majd visszaadja az értéket, a i++ pedig visszaadja, majd inkrementál. Egy sima
#include <stdio.h>
int main()
{
int i;
for( i=0;i<10;++i vs. i++)
printf("%d",i);
return 0;
}
progiban nincs különbség a kimentek között, mert első esetben inkementálja i-t, majd visszaadja a fornak, míg második esetben visszaadja, majd utána inkrementál, de mire a printf-hez jut átesik i egy inkrementáláson.

Atka001 2013.02.20. 09:33:04

Üdv!

A szerdai 10:00-ás laboron, akinek még nincs binomja, annak jelezném, hogy még nekem sincs, szóval írjon egy üzenetet, vagy akár itt is szólhat, hogy vegyük fel a kapcsolatot. :)

Köszi!

DeeGort 2013.02.20. 13:33:37

Írtam egy függvény sebességmért és megnéztem, hogy van-e valamilyen különbség a prefixes és a postfixes forciklus között, és hol az egyik hol a másik gyorsabb, ezt szerintem betudhatom a megszakításoknak, és tekinthetem azonosnak a kettőt.
A printf-et kivettem mert az ugyanaz a két verzióban és problémás sebesség mérés szempontjából.

#include <time.h>
#include <stdio.h>
#define SENSITIVITY 100000000

clock_t sptest(void (*work)(void))
{
int i;
clock_t t;
t = clock();
for(i = 0; i != SENSITIVITY; i++)
{
(*work)();
}
t = clock() - t;
return t;
}

void a_version()
{
int i;
for(i = 0; i < 3; ++i){}
// printf("%d ", i);
}

void b_version()
{
int i;
for(i = 0; i < 3; i++){}
// printf("%d ", i);
}

int main()
{
clock_t a_sp, b_sp;
a_sp = sptest(a_version);
b_sp = sptest(b_version);
printf ("Futasido %d (%lf sec).\n",a_sp,((double)a_sp)/CLOCKS_PER_SEC);
printf ("Futasido %d (%lf sec).\n",b_sp,((double)b_sp)/CLOCKS_PER_SEC);
return 0;
}

cellSigma 2013.02.20. 14:25:08

Az előadáson elhangzott feladathoz még annyit tennék hozzá, hogy a postfix operátor egy másolatot készít az inkrementálandó változóról, mert érték szerint ad vissza, így elhanyagolhatóan ugyan, de kevésbé hatékony.

@Atka001: Nekem sincsen még binomom szerdára, szóval ha senki nem jelentkezett azóta nálad, akkor én szívesen :)

szelepsapka 2013.02.20. 14:58:41

@Atka001: nekem sincs még binomom, szoval ha azóta nem találtál akkor itt vagyok én :D

Atka001 2013.02.20. 15:03:29

@cellSigma: Küldtem neked üzenetet, nem tudom, hogy megkaptad-e? Ennél a *** blog.hu-nál nem lehet tudni :)

@szelepsapka: Ha esetleg cellSigma meggondolta magát, akkor majd szólok :D

cellSigma 2013.02.20. 15:08:37

@cellSigma: Itt jobban le van írva:

www.fairwaytech.com/2012/03/prefix-vs-postfix-increment-and-decrement-operators-in-c/

The compiler, upon seeing i++, creates a temporary object to hold the original value of i so that after the increment completes the original value of i can be returned. A temporary is not required when compiling ++i since the value returned by the increment operation is the value i has after the increment has completed. This means that i++ requires more memory and runs more slowly than ++i (space is required for the temporary and time must be spent copying the original value of i into the temporary).

The compiler can optimize away this temporary (effectively turning i++ into ++i) for built in types (such as int) in situations where the result of the increment is not used in the containing expression (as in this for loop example). This optimization is possible because the compiler can see that the temporary value that gets returned is never unused. Choosing between i++ and ++i for built in types doesn’t matter because the compiler will always optimize i++ into ++i where possible.

nb · http://fersml.blog.hu 2013.02.20. 15:46:28

@Gabol91: igen, én a kód szépségére gondolok valóban.

nb · http://fersml.blog.hu 2013.02.20. 15:56:05

@celticfrost: az szokott lenni a gyakorlat, hogy ha lemegy a "kampány", ami tipikusan a laborok környékén van, akkor a hallgató áttekinti a termését és ír egy olyan kommentet, amelyben leírja, hogy végül is hány pontot szerzett a kérdéses aktív periódusában (hogy ne kelljen minden kommentje után nekem a listát frissíteni).

Más: ha már bevezettük a "varázslás" terminológiát, bár ez nem fejezi ki azt amire jobban hajaz nálam, mert az a "hókusz-pókusz" inkább :-))) de a haha-s printf nekem nem túl elegáns; nem beszélve, hogy mostanság a haha-nake már politikai színezete is van :)

nb · http://fersml.blog.hu 2013.02.20. 15:59:13

@DeeGort: sajnos bizonyíték mindig kell! Ha a kép nem megy, akkor a top szöveges kimenetéből tudnál idézni.

De ezeken a kódokon még gyúrjál pls., mert a bedrótozott szám (magic constant) nagyon csúnya a kódban.

nb · http://fersml.blog.hu 2013.02.20. 16:02:41

@DeeGort: az első egyáltalán lefordul? Illetve nem kell a mágikus konstansos varázslás, a sleep a jó irány.

nb · http://fersml.blog.hu 2013.02.20. 16:03:56

@DeeGort: helyes, de az első kódból a varázslást elimináld ki azért.

nb · http://fersml.blog.hu 2013.02.20. 16:07:22

@Kovács Máté Olivér: kicsi csiszoljunk a szaknyelveden: mi az, hogy tud kezelni... mondjuk azt, hogy az int-nek megfeleltetett tárhelyről (szóhossz méretből) kitolja az egyest... hát ez sem hangzott olyan jól, mint ahogy gondoltam azért :)

Egy ellenőrző kérdés: milyen számokat ír ki, milyen számok azok, amelyeket megadtál ugye?

DeeGort 2013.02.20. 16:10:35

@nb: Eltávolítva így néz ki, csak így a top-on már nem látszódik annyira nem terheli a procit.
// Alig terhelo
#include <iostream>
using namespace std;

int main()
{
for(;;)
{
sleep(1);
}
return 0;
}

nb · http://fersml.blog.hu 2013.02.20. 16:10:41

@Kovács Máté Olivér: ez a program elég problémás:

1, szintaktikailag hibás, ilyet ne is kommenteljünk...

2, ciklus be sem indul, így mivel azonnal vége, tényleg nem terheli a procit; de nem ilyen triviális megoldásra gondoltam nyilván :)

nb · http://fersml.blog.hu 2013.02.20. 16:12:47

@Kovács Máté Olivér: mindig programot kérek és bizonyíték képe. A verbális mese gyorsan oda vezet, hogy arról beszélgetünk, hogy mit gondolhatott Petőfi Aranyról? :)

nb · http://fersml.blog.hu 2013.02.20. 16:14:42

@Kovács Máté Olivér: egy ötletnek el megy a blokkolódó IO használata, de ne erőltessük... a conio-t meg főleg ne :) ... Remélem már van Linuxod :)

nb · http://fersml.blog.hu 2013.02.20. 16:17:17

@Gabol91: pályázni mindenre, de ha lemegy a "kampány", neked kell tudni, hogy belefértél-e az első 3-ba, elfogadtam-e stb.

De kell bizonyíték, főleg, ha hibás kódót teszel be: mi az a nagy Sleep...

futó progikat, s ne filoszozzunk, hogy ez szerintünk menne, mert nyilván nem is mehet...

élj szimbiózisban a gépeddel.

nb · http://fersml.blog.hu 2013.02.20. 16:22:42

@cellSigma: érdekes improvizáció a select használata, de erre a célra nem lett volna elég a szimpla

man 3 usleep

használata? De a PI-s rész elég varázslás jellegű nálad is, nem beszélve a mágikua 900000... számról.

nb · http://fersml.blog.hu 2013.02.20. 16:24:05

@cellSigma: szubjetív tudom, de tetszik. (Azért valódi progiban kerüld :)

nb · http://fersml.blog.hu 2013.02.20. 16:30:14

ne g++-al fordítsd parancssorból, hanem szimplán add ki a make parancsot.

Másik: a telepített linuxod nem lehet, hogy az csak 32-bites?

uname -a parancs mit ír ki?

nb · http://fersml.blog.hu 2013.02.20. 16:31:40

@ht93: helyedben kipróbálnám, amit írok... :)

előző komment megygyőzőbb volt.

nb · http://fersml.blog.hu 2013.02.20. 16:32:33

@Codared: tudni az egy dolog, itt ki kell próbálni és onnan jön majd a valódi értékes tudás!

cellSigma 2013.02.20. 16:36:58

@nb: Megpróbáltam összehackelni egy alternatív megoldást a sleep()-re, mert mások már haszálták előttem :) A varázslás eltüntetésén dolgozom! Illetve rendes progiban nem fogok olyan feltételt használni, ígérem :)
uname -a:

tinypic.com/r/296cjg7/6

32 bites Mageia (Mandriva fork), tegnap tettem fel. De van még itt egy Fedora KDE spin telepítő, amit talán ki kellene próbálnom...

DeeGort 2013.02.20. 16:45:06

@nb: Felszámoltam a mágikus konstanst és kicsit gyúrtam a progin:
kepfeltoltes.hu/130220/snapshot2_www.kepfeltoltes.hu_.png

Püsök Levente 2013.02.20. 16:52:03

A legszebb végtelen ciklus versenyre nevezném ezt a kódot, ha nem késtem még le.

int main ()
{ int i, n=10;
for(i=0;i<n;i++)
if(i==9)
while(i)
i--;
return 0;
}

cellSigma 2013.02.20. 17:06:52

@nb: Varázslás kiiktatva, select()-et meghagytam, a kódban az alig és a nagyon terhelő ciklus között így csak minimális különbség van.
Nagyon terhelő ciklus:
#include <sys/time.h>

int main(){

struct timeval tv;
tv.tv_sec=1;
tv.tv_usec=0;
while(1) {
select(0,0,0,0,&tv);

}
return 0;

}

Kép:tinypic.com/r/2v0lj53/6

Alig terhelő:

#include <sys/time.h>

int main(){

struct timeval tv;

tv.tv_usec=0;
while(1) {
tv.tv_sec=1;
select(0,0,0,0,&tv);

}
return 0;

}

Kép: tinypic.com/r/24wbjhv/6 (Nem is látszik a top folyamatok közt, de a másik terminálablakban látható, hogy fut)

cellSigma 2013.02.20. 17:18:56

Azt hiszem, a másik könyv 2. fejezetében lévő programok lefordításáért még lehet pontot szerezni, itt vannak:

tinypic.com/view.php?pic=dm60wm&s=6

Matthew03 2013.02.20. 17:19:14

@nb:ellenörző kérdésre a válasz: 2 hatványait írja ki, a számláló pedig pörög. mikor 32bithez ér, nem tudja tovább kezelni és kilép a whileból( az egyest addig csúsztatja, míg kicsúszik a keretből és 0 lesz, így leáll a while) és kiírja, hogy 32 bites(nekem).
A magyarázatom helyessége, amit írtam legelőször az amúgy jó volt, attól eltekintve, hogy nem nagyon használtam nagyon szaknyelvet?(max adható pontszám:5)

nb · http://fersml.blog.hu 2013.02.20. 18:52:25

@cellSigma: igen, a 64 bites rendszereken is tipikusan 4 bájtos az int, szóval a 32 a várt szám.

A 32, 64 bites rendszerk között ez fog különbözőket kiírni:

#include <stdio.h>
int
main ()
{
printf ("%d\n", sizeof (char) * 8);
printf ("%d\n", sizeof (short) * 8);
printf ("%d\n", sizeof (int) * 8);
printf ("%d\n", sizeof (long) * 8);
printf ("%d\n", sizeof (char *) * 8);
return 0;
}

egyébként az i686 32 bites rendszert jelent, ha a hardvered olyan, miért nem 64-eset tettél fel? Az ezt írná ki:

norbi@colossus:~$ uname -m
x86_64

nb · http://fersml.blog.hu 2013.02.20. 18:53:15

@Püsök Levente: ez is varázslás szerintem, azaz fölöslegesen bonyolult szervezést tartalmaz.

mykola · http://megosztanam.blog.hu/ 2013.02.21. 12:59:36

Lenne egy kérdésem a pontszerzéssel kapcsolatban.
Pontot úgy lehet szerezni, hogy az első x ember aki ide kommentbe mutatja meg a megoldást kap pontot vagy ez agykorlaton van így? Mert a megfogalmazásból mint a gyakvezető dönti el, meg a közösség előtt elmagyarázza úgy jön le, mintha gyakorlat közben kaphatunk pontot. De a kommentekből úgy tűnik, hogy itt megy a csata a pontokért.

nb · http://fersml.blog.hu 2013.02.21. 13:05:01

Kedves Hallgató!

Úgy látom, hogy az első "kampány" (amikor tömegesen jönnek a kommentek) lenyugodott a blogon. Ilyenkor fogom kérni, hogy akik résztvettek benne, vagy a laboron szereztek pontokat, azok tekintsék át a kommenteket és írják meg immár egy összefoglaló rövid kommentben, hogy szerintük hány pontot szereztek (volt, akinek feldobtam még néhányat, volt, aki módosítgatott, nézzük át a sorrendiségét is a feladatnak, hogy befértetek-e stb.)

Tudom, hogy ez sokaknak egy nem megbízható pontozás; s igazuk is van; ám szokjuk meg, hogy a valóságban sok rendszer ilyen, gondolj csak az UDP/IP-re például :)

Éppen ezért fontos, hogy ha vita alakul ki köztünk, vagy köztetek, akkor a saját listáját mindenki fel tudja mutatni és ha kell vezetői döntés, akkor ki tudom bogarászni a blogról, ahogyan az UDP is biztosabbá tehető saját nyugtázással stb. :)

Köszönettel,
BN

nb · http://fersml.blog.hu 2013.02.21. 13:07:15

@mykola: bizony ez küldelem életre-halálra; de legalábbis a jegymegajánlásra :)

A laboron a gyakvezér tejhatalommal közli, hogy ki-mire hány pontot kapott, ezt a hallgató a labor után vagy a kapcsolódó "kampánya" után itt is közli a blogon és akkor kerül fel a jobb oldali "Vadászok" c. dobozba.

nb · http://fersml.blog.hu 2013.02.21. 13:11:27

@nb: de természetesen a blog önálló (globális) életet él:

"A posztokban adott feladatok hatóköre az adott hét (de figyeld a kommenteket, mert ha mást nem mondunk, akkor mindig az első hármat pontozzuk), a laborvezetők által kiadott az adott nap."

tehát kétféle pontszerzés van, külön scope-al: egyik a labormunkát inspirálja, a másik az otthoni önállót! Az már nyilvánvaló etikai szabály, hogy ugyanazt a megoldást ne számold el két esetben, azaz ha már a blogon bezsebelted, akkor a laboron ne vedd el az első 3-ból a helyet a többiektől pl.

nb · http://fersml.blog.hu 2013.02.21. 13:22:45

Még egy üzi a Neptunból:

"Hallgató is pontoz hallgatót"

Kedves Hallgató!

Arra bíztatlak Benneteket, hogy éljetek a tárgyban jelzett lehetőséggel. Ehhez persze az kell, hogy pl. amikor a binom megkapja a kérdéseit, akkor ami nem tiszta, arra a rákérdez a blogon, s ha kap jó választ, akkor díjazhatja a válaszolót, aki majd ezt elszámolja magának a saját kampányában.

Üdv,
BN

Cvanger 2013.02.21. 13:45:32

1.) A "régi" prezi 106-os -> 2pont
2.) A könyv 25.oldala -> 3pont
3.) Első celebráció -> 5pont
4.) Másik könyv Chapter 2 -> 1pont
5.) Az órán elhangzott -> nem tudom mennyit ért

Összesen: 11 + (nem tudom mennyi) pont.

DeeGort 2013.02.21. 14:20:57

Kétféle végtelen: 3-3 pont

cellSigma 2013.02.21. 17:00:14

1., Kétféle végtelen: DeeGort és Gabol91 után 3. beküldőként: 3 pont

2., Vermes példa szelepsapka után 2. beküldőként: 3 pont

3., Másik könyv 2. fejezetében lévő programokért: 1 pont

4., Legszebb végtelenciklus: (erre a kommentre hivatkozva: @nb: 1 pont

Összesen tehát 8 pont saját elszámolás alapján.

Gabol91 2013.02.21. 17:54:17

1.) Kétféle végtelen: 3 pont.

repeatProg1 2013.02.21. 18:29:11

1 végtelen 3pont
./ magyarazat 1pont
szohossz.c magyarazat 5pont
ossz 9pont. :)

bebop88 2013.02.21. 18:44:31

végtelen 3 pont ( a minimalista for ciklussal :D )

Scrop 2013.02.21. 18:58:56

Kétféle végtelen : 3 pont

Kiemc (törölt) 2013.02.21. 19:05:09

Bátfai Norbert csütörtök 16–18 órai laborján a "Kétféle végtelen" nevű feladat elsők közötti megoldásáért 3 pont szerezve.

smajdam 2013.02.21. 19:13:23

i++ ++i kérdés: [nem tudom mennyi pont]

Legszebb végtelen ciklus-ra még nevezném:

int main(void)
{
while(1)
{
//szerintem ennél nincs is szebb :D
}

return 0;
}

ShuffleSource 2013.02.21. 19:46:01

i++ ++i kérdés, elsőnek beküldött válasz: 3 pont

ShuffleSource 2013.02.21. 20:10:22

Szerintem a legszebb végtelen ciklus:
while(1<2);

Miért?
int main()
{
while(1<2){
printf("a matematika törvényei még mindig működnek...\r\n");
}
printf("Eljött a világ vége!");
return 0;
}

szelepsapka 2013.02.21. 23:25:58

1.) a "régi" prezi 105, 106, 107 válasz. 6 pont
2.) KÖNYV 25. oldal : vermes példa kipróbálás. 3 pont

szelepsapka 2013.02.21. 23:28:01

Továbbá érdeklődnék h a szerdai 10órás csoportbol van-e valaki akinek nincs még binomja??? Mert én még mindig magányos farkas vagyok.

DeeGort 2013.02.22. 09:40:58

Órai plusz pont (Az első celebráció): 5 pont
Korábban posztban még szereztem 3-3 pontot a: Kétféle végtelen feladatra.

Scrop 2013.02.22. 09:51:13

@DeeGort:
Ezzel asszem mi is megszívtuk, mert az valójában nem 3-3 pont hanem csak 3, mert úgy van írva h az első 3 3 pont :D. Bocsi h ünneprontó vagyok :D

DeeGort 2013.02.22. 10:15:15

@Scrop: Aha, értem, köszi azét, hogy szóltál.

Ing'Ranieth 2013.02.22. 14:04:48

Pénteki 8-10 csoport:

Kétféle végtelen: 3 pont
Sleep műküdésének "bemutatása": 1 pont

Püsök Levente 2013.02.22. 15:05:55

Lenne egy kérdésem a tömbök kezelésével kapcsolatban c nyelvben.
Deklarálok egy tömböt pl:

int a[100];

aztán ezt a tömböt feltöltöm elemekkel, és a későbbiekben van arra lehetőségem, hogy ezt a tömböt bővítsem vagy szűkítsem? Tehát, hogy ugyan ennek a tömbnek később 101 eleme legyen, vagy 99 eleme legyen, hogy tulajdonképpen egyenértékű legyen azzal, mintha az elején egy a[101] tömböt vagy egy a[99] tömböt deklaráltam volna.

Lehet, hogy nem a megfelelő helyre írtam a kérdésemet, de nem tudok olyan felületről ami kimondottan erre való lenne (ami lehet, hogy az én tudatlanságomat tükrözi) ha nem ide való, akkor elnézést :D

Matthew03 2013.02.22. 15:13:47

Első celebráció -> 5 pont
Egyik végtelen ciklus -> 3 pont

Matthew03 2013.02.22. 15:17:36

Tömb bővítését úgy tudom vektorokkal meg lehet oldani c++-ban!
- létrehozni :
vector<T_Info> t;

- bővítése:
t.push_back(egy_t);

Hozzáférés iterátorokkal.
www.cplusplus.com/reference/stl/vector/begin/

cellSigma 2013.02.22. 15:20:37

@Püsök Levente: Legjobb tudomásom szerint C-ben erre nincs lehetőség hagyományosan deklarált tömbökkel, dinamikus
tömbökkel lehet megoldani a malloc()-realloc()-free() hármassal. C++-ban pedig az std::vector tároló implementálja a dinamikus tömböket, ott azzal meg lehet oldani. Itt egy tutorial C-hez:

www.codingunit.com/c-tutorial-the-functions-malloc-and-free

Újrallokálásnál azonban a tömb minden elemét új helyre mozgatja a memóriában, és úgy fűzi hozzá az új elemeket, tehát ez elég költséges lehet. Remélem minden információm pontos, és segítettem valamit ezzel :)

szelepsapka 2013.02.27. 10:53:51

laboron 2 féle végtelen ciklus (3pont)

Macsi Tibor 2013.02.27. 13:12:03

Érdeklődnék, hogy a csütörtöki 16 órás csoportba van-e olyan akinek még nincs binomja?

Pumuckl 2013.02.27. 15:33:46

Szerdai 12:00-13:40 labor
- Egyik végtelen ciklus: 3 pont
- Másik végtelen ciklus: 3 pont
- szohossz.c magyarázat: 5 pont

atilla93 2013.04.04. 15:46:08

105/1 az imputot lemásolja az outputra.
105/2 random számokat állít elő 10 darabot 1-10-ig (2 pont)
106 dupla pontossággal átlagot számol az imputról. (2 pont)
107 az atlag.c kimenetét átmásolja az rszamok.c bemenetére. (2 pont)

atilla93 2013.04.04. 16:22:40

és nem imput, hanem input :D

nb · http://fersml.blog.hu 2013.04.14. 11:59:08

@ShuffleSource: ezek miért pontosak? Nem sima laborkártyák?
süti beállítások módosítása