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

Retreat, Hell

2012.02.15. 07:27 nb

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

Választott címünk arra utal, hogy ha már felvettük a "válogatott képzést", akkor ne adjuk le, sőt teljesítsük sikerrel! Ez az első labor posztja, ahol

  • beszedjük az első hallgatói laborkártyát
  • megnézzük a gcc használata parancssorból
  • a forráskód indentálását
  • a manuál lapok használatát
  • egy forrást kipróbálunk a PP 25-31. oldal példái közül (letöltés, kipróbálás, megbeszélés)

a második laboron:

 

[norbert@matrica ~]$ svn co svn://hallg.inf.unideb.hu:2005 elso
A    elso/bevezetes
A    elso/bevezetes/elsoOpenMP
A    elso/bevezetes/elsoOpenMP/pmandel
A    elso/bevezetes/elsoOpenMP/pmandel/mandelpngt.c++
A    elso/bevezetes/elsoOpenMP/pmandel/pmandelpngt.c++
A    elso/bevezetes/elsoOpenMP/pmandel/ompmandelpngt.c++
A    elso/bevezetes/C
[norbert@matrica ~]$ cd elso/bevezetes/elsoC
[norbert@matrica elsoC]$ ls -l
total 12
-rw-rw-r--. 1 norbert norbert 194 Feb 15 11:31 atlag.c
-rw-rw-r--. 1 norbert norbert 223 Feb 15 11:31 rszamok.c
-rw-rw-r--. 1 norbert norbert 214 Feb 15 11:31 szohossz.c
[norbert@matrica elsoC]$ gcc szohossz.c -o szohossz
[norbert@matrica elsoC]$ ./szohossz
Ki celebrálja a szóhossz.c-t?
 

Trófeák

Az előadáson megjelentektől fogadom csak el az alábbiakat:

  • tetsz./1 trófea: Levénez-féle idővonal (lásd. a megfelelő "robbanó" fóliát)
  • 3/1 trófea: lex-es szó, szám, sor, betű számláló (ugyancsak lásd. a megfelelő "robbanó" fóliát)

Labortrófeák

  • laboron 3/1 Írj C-ben két végtelen ciklust: az egyik alig használja a procit, a másik pörgesse, ahogy belefér (1. alkalom, feb. 13-i hét)
  • laboron 3/1 A lenti "Karakterhegyezés" pont két ellenőrző kérdése (2. alkalom, feb. 20-i hét)

Egyéb trófeák

  • 3/1 trófea: egy Qt-s példa felélesztése, kipróbálása a Qt SDK-ból
  • 3/1 trófea: egy Qt-s példa felélesztése, kipróbálása parancssorból
  • tetsz./1 trófea: a kommentben szereplő videó otthoni saját elkészítése, jó hanggal :) (ezt lehet halmozni, azaz amennyit elkészítesz, annyiszor 1 trófea, YouTube-ra kérem)
  • 2/5 trófea: nehéz feladat, hogy kicsit nyújtsuk a mezőnyt :) De ne ess pánikba: megoldása jóval megelőzi a kurzus normál haladási sebességét, a main stream-ben, azaz a "tömegnek" majd a 6. előadásban jön: a szálakat is használó Qt-s példák valamelyikében az osztályok kommunikációját írd át a "callback" helyett a Qt slot-signal mechanizmusára. Ez a feladat teljesen önálló OO tervezést feltételez! Ha kezdő vagy Qt-ben: itt a slot-signal (157. o.) pl. vagy megtalálod a könyvtárban.
  • 10/2.5 trófea: legyen egy kisebb ugrás is: a 3. előadás 03-15glibc-s "printf meghekkelése", ez remek móka és tanulságos, ezért 10-et fogadok el, s +1 pont, ha van YouTube-os bemutató videó

A megoldásokat a blogon kommentként kérem megmutatni, screenshot+forrás formában tipikusan. Ha külön nem mondjuk, mindig az első hármat fogadjuk el. A saját trófeák nyilvántartását minden kapcsolódó hallgató önmaga végzi. Ha saját (mikor, mire, mennyit) kimutatása nem egyezik a blogon lévő (csakis összpontszámával), akkor két hetes ablakon belül a saját kimutatása elküldésével jelzi ezt nekem.

Blogoljunk!

Szórakoztatásodra a tavalyi posztokból összevágok egy kis montázst. Íme, élvezzük:

Az első kisbajnokság

Futtassuk a PP 27. oldalának for(;;); végtelen ciklusát "vegtelen" néven és ennek

for(;;)
  sleep(1);
módosítását "vegtelen2" néven. Majd egy ps axu|grep vegt parancs 3. (CPU) oszlopát hasonlítsuk össze és világítsuk meg a helyzetet a man 3 sleep alapján!

A laborkártya kipróbálása, például a karakterhegyezés

 

Forrás celebrálása

Ellenőrző kérdések

  • Mi történik, ha a saját függvényt a valódi könyvtári #include <string.h> / strncpy-al helyettesíted? A válaszod ellenőrzéséhez a forrás elejére illeszd be a #include <string.h> sort, illetve a string_masolo_man_pl_alapjan függvény két hívásánál ezt a nevet egyszerűen írd át strncpy-ra, az aktuális paraméterlistához nem is nyúlva.
  • Mi történik, ha a string_masolo_man_pl_alapjan saját függvényed implementációjában az első ciklusban felcseréled a dest[i] = src[i]; sort a src[i] = dest[i]; új sorral? Tehát, ha ez van a forrásodban:
      for (i = 0; i < n && src[i] != '\0'; i++)
        //dest[i] = src[i];
        src[i] = dest[i
    A konklúzió: mivel a string_masolo_man_pl_alapjan függvényünk első ciklusából mindkét hívásunk alkalmával az i < n feltétel meghiúsulása miatt lépünk ki, így a \0 karakter sztring után írása (azaz a karekterlánc lezárása) egyik esetben sem következik be. Ez tudjuk jól elkapni a 2. hívásnál, mert amikor a printf írja ki az eredményt, akkor ő egy \0 karakterig ír és az előző hívásból ott "maradt" a betűt is kiírja.

Módosítgassuk az első előadásban felvillantott, az strncpy könyvtári függvény manuáljabeli példa alapján megírt implementációnkat, hogy a forrásban kezdjen úgy kinézni néhány sor, mint amilyenek a C programok szoktak lenni!

Például az Androidos telefonok Linux kernelében előfordul ilyesmi: *src++? Lássuk, hozzuk le a forrást:

[norbi@sgu Android]$ git clone git://android.git.kernel.org/kernel/common.gits keressük benne az említett mintát:

[norbi@sgu Android]$ find . -name '*'|xargs grep "*src++"|wc
174     804   10699
nem vitás, a profik is írnak ilyeneket, esetleg pillantsunk is bele a common/include/linux/fb.h forrásába, 1026. sor.

 

Második kisbajnokság

Nyeri, aki a fenti string_masolo_man_pl_alapjan függvényt rövidebben megírja egy kommentben, február 26-ig. A hossz a függvény testének nyitózárójelétől a bezáróig, őket nem beleértve a felhasznált nem szóköz betűk száma. Így az enyém most 75:

  int i;
  char *p = d;

  for (i = 0; i < n && (*d++ = *s++); i++)
    ;

  for (; i < n; i++)
    p[i] = '\0';  

  return p

A szappanoperák nyelve

 

A szappanoperák nyelve nem a C. Mert bár Javában már lehet olyan programokat írni/olvasni a kislámpánál, amik felérnek egy korlátozott szókincsű regény olvasgatásával, ez azért C-ben nem megy. Ám egy-két sort megpróbálhatunk szépen olvasni. Erre mutat egy példát az a laborkártya, ami az alábbi két utasítás összehasonlítását írja elő.

Forráskódok celebrálása

I.)
if(signal(SIGINT, utolso_tennivalo) == SIG_IGN)
  signal(SIGINT, SIG_IGN
II.)
if(signal(SIGINT, SIG_IGN) != SIG_IGN)
  signal(SIGINT, utolso_tennivalo);

Ez a laborkártya nem könnyű annak, aki most ismerkedik a programozással. Leginkább őket segíti a jelen poszt, mely alábbi „webcast”-ja a PP egy olyan példájának a kipróbálását mutatja, amiben szerepel az egyik kérdéses kódcsipet. (Ne hagyjuk magunkat azzal megrémiszteni, hogy a signal() egy rendszerhívás, a mi szintünkön rendszerhívás vagy könyvtári függvény, akár saját programbeli hello() függvény: egyelőre egyre megy. De a haladóknak sincs okuk az aggodalomra, a 4. előadásban írunk saját rendszerhívást és saját glibc könyvári függvényt is.)
 

 A videó feldolgozása után annyi a hallgató feladata, hogy értelmezi a II. kódcsipetet.

Harmadik kisbajnokság

Itt az első három kommentben érkezett helyes választ adó viszi el a kisbajnokságot.

A következő kis progi (hátterét lásd majd a 2. előadásban) kapcsán kell helyesen megválaszolni ezt a két kérdést:

  • ki a szülő folyamat szülője
  • mi lesz a gyermek folyamat

ha futtatod ezt a programot?

 

 Lásd PP 36! Ez a téma már elővetíti a 2. előadást, amelybe szerintem bele tudunk majd kezdeni szerdán.

 

90 komment

Címkék: első labor

A bejegyzés trackback címe:

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

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.

Vörös Főnix 2012.02.15. 13:16:44

1 pont - programelemzes (hany btes), 1 pont a vegtelen 0/100

Seventeen17 2012.02.15. 19:56:16

Végtelen ciklus 1 pont andrewpregh - 17

nimuss 2012.02.15. 20:41:36

vegtelen ciklus 0%/100% 1 pont

Vörös Főnix 2012.02.15. 21:05:33

"Izgalmasabb e levél, ha feldobok egy villámkérdést: milyen számokat ír ki az svn szohossz.c-je? Az első bekommentelőnek fél pont a jó válaszért."

Reakció: azokat az értékeket írja ki, ami a 00...000001 ábrázolású szám balrashiftelésével jön létre, vagyis más megközelítésben azt, hogy egy x bit hosszon mekkora a legmagassabb helyiértéken ábrázolható érték.
A kapcsoszárojel bal oldalán van a "bithossz" a jobbon meg a legmagassabb helyértéken ábrázolható érték. Végél kiírja, hogy hanyadik érték volt az, ahol még éppen nem csordult ki az 1-es. De ezt az elemzést már órán végigvittem.

2012.02.15. 21:16:39

Kérdés: milyen számokat ír ki az svn szohossz.c-je?
Válasz: 2 hatványait írja ki

[1 1]
[2 2]
[3 4]
[4 8]
[5 16]
[6 32]
[7 64]
[8 128]
[9 256]
[10 512]
[11 1024]
[12 2048]
[13 4096]
[14 8192]
[15 16384]
[16 32768]
[17 65536]
[18 131072]
[19 262144]
[20 524288]
[21 1048576]
[22 2097152]
[23 4194304]
[24 8388608]
[25 16777216]
[26 33554432]
[27 67108864]
[28 134217728]
[29 268435456]
[30 536870912]
[31 1073741824]
[32 2147483648]
A szohossz ezen a gepen: 32 bites

nb · http://fersml.blog.hu 2012.02.15. 21:22:42

@mamenyaka: igen most ezen volt a hangsúly, hogy 2 hatványokat (mivel a használt shiftelés = 2-vel való szorzás)

Schrödinger Macskája 2012.02.15. 21:33:23

Írj C-ben két végtelen ciklust: az egyik alig használja a procit, a másik pörgesse, ahogy belefér.

Válasz (a másodikra) (egyáltalán nem tudom, hogy jól csinálom-e, de ide mellékelem a forráskódot)

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

int main() {

for (;;)
fork();
}

Még nem jöttem rá, hogy hogyan kapnak pontot az előttem szólók, a forráskódot sem látom, de merészkedek megoldással előrukkolni.

D3am0n 2012.02.15. 23:17:09

Harmadik kisbajnokság

Rövidebb kód:
int i;
char *p = d;

for (i = 0; i < n && (*d++ = *s++); i++)
;

return p;

nb · http://fersml.blog.hu 2012.02.16. 09:58:03

@Schrödinger Macskája: fork bombát nem kéne!!! A laborodon majd kiderül pontosan, miről van szó.

Ha egyszer majd accountot akarnék adni egy szerveremre, majd emlékeztess, hogy fork bombára hajlamos vagy :-)))))

jakaba 2012.02.16. 16:20:11

Volt szó róla, hogy a videók újracsinálásáért és Youtube-ra való feltöltésért trófeát lehet gyűjteni. A videó már kész, csak .ogv formátumban, amit nem eszik meg a Youtube, és a 3 fajta konvertálási technika mind rosszul konvertált (szemcsés, rossz videominőség). A felvételt a Desktop Recorderral csináltam. Tud valaki valamilyen konvertelálót, ami a .ogv-t valamilyen YouTube-kompatibilis video állománnyá konvertálja?

D3am0n 2012.02.16. 16:41:43

1. sudo apt-get install mencoder
2. mencoder xy.ogv -ovc xvid -oac mp3lame -xvidencopts pass=1 -o xy.avi

thevr 2012.02.16. 17:09:22

Kisbajnokság 2 ciklus megoldása:

1. 0% CPU

for(;;)
sleep(1);

2. 100% CPU

while(1){
}

+1 pont

*bohóc* 2012.02.16. 17:46:23

2012.02.16
+0,5 pont celebrálás
+1 pont 0%/100% CPU
+0,5 pont for ciklus
összesen: 2 pont

jakaba 2012.02.16. 18:46:11

Köszi az útmutatást az ogv to avi konvertálás kapcsán, de már az 10. módszer is ugyanazt produkálja: az ogv-nél minden okés, szép a kép, a konvertálás után viszont tele van fekete foltokkal, használhatatlan az egész. Valaki tud még valamilyen ötletet?

D3am0n 2012.02.16. 18:53:27

mencoder xy.ogv -ovc lavc -lavcopts vcodec=mpeg1video -oac mp3lame -o xy.mpg
ezt a beállítást tudom még javasolni!

jakaba 2012.02.16. 19:03:32

D3am0n! Köszi szépen, de ugyanaz lett a végeredmény.

D3am0n 2012.02.16. 19:15:55

Akkor Pitivi videoszerkesztő!
sudo apt-get install pitivi

D3am0n 2012.02.16. 19:24:15

Ha az sem jönne be akkor avidemux több ötletem nincs!

jakaba 2012.02.16. 19:56:34

Végre megszületett, de Windows alatt konvertáltam, ott minden működött, pár perc volt az egész, az AVS Video Convertert használtam.
Itt a youtube link:
www.youtube.com/watch?v=GwemljH4Qzo
Ha minden okés, akkor +1 trófea. Norbert, jó lesz így?

zacsesz 2012.02.16. 21:31:19

Üdvözletem!

Kaptam 2 plusz pontot, név szerint:
szohossz.c forráskód felolvasása:
1 pont
2012.02.16.

Írj C-ben két végtelen ciklust: az egyik alig használja a procit, a másik pörgesse, ahogy belefér.
1
2012.02.16.

Ábel Zoltán

bensz92 2012.02.17. 10:20:55

2012.02.16

+1 pont feladat működésének celebrálása

Tarr Bence

D3am0n 2012.02.17. 11:49:15

Harmadik kisbajnokság

Rövidebb kód:
int i;
char *p = d;

for (i = 0; i < n && (*d++ = *s++); i++)
;

return p;
Működés:
youtu.be/dv5Fbh18Iz0

jakaba 2012.02.17. 14:14:57

Harmadik kisbajnokság, rövidebb kód:

int i;
for (i = 0; i < n && (*d++ = *s++); i++)
;
return d;

videó:
youtu.be/P_Rv8E7XV2c

jakaba 2012.02.17. 14:21:58

strncpy celebrálása videó, +1 trófea:
youtu.be/DwlBmJQpB6Q

D3am0n 2012.02.18. 00:11:22

+1 trófea: egy Qt-s példa felélesztése, kipróbálása a Qt SDK-ból

Video:
www.youtube.com/watch?v=UAZ2Tt73Ge4

Schrödinger Macskája 2012.02.18. 13:36:46

Sziasztok!

Megpróbáltam lehúzni az első példában szereplő mappát, de connection timed out...Tudom, hogy nem biztos hogy elérhető a tartalom a hallg szerverről a tűzfal miatt, valaki esetleg tud valami megoldást? Ha nem jutunk egyről a kettőre, akkor meg majd a jövő heti gyakon pendrive-on hazahozom, de addig is, ha bárki tud bármit, megpróbálom :)

nb · http://fersml.blog.hu 2012.02.18. 13:57:43

@Schrödinger Macskája:

svn co svn://hallg.inf.unideb.hu:2005 elso

erre gondolsz?

Ha igen, akkor ssh-be a shrek.inf.unideb.hu-ra vagy a hallg.inf.unideb.hu-ra és onnan rántsd le, azokat meg már látod kívülről is.

de ide is kitettem: www.inf.unideb.hu/~nbatfai/p1/forrasok-SVN/

nb · http://fersml.blog.hu 2012.02.18. 13:58:31

@Schrödinger Macskája: ja, a shrek nem inf-es, hanem shrek.unideb.hu

Schrödinger Macskája 2012.02.18. 14:04:47

@nb: Igen, erre gondoltam, köszönöm a választ, akkor szedem is a linkről, a shrek.unideb.hu sem enged be ssh-n keresztül, legalább is engem. (Tényleg ki lettem tiltva :D )

Toma89 2012.02.18. 22:43:50

Sziasztok! Mivel már lemaradtam a Harmadik kisbajnokságról, ezért csak érdekesség képpen mutatnám meg az én megoldásomat:

while ( ( n--) > 0 && ( *d++ = *s++ ) )
;
return d;

Jelen esetben nincs szükség a fügvényen belül az i int típusú automatikus változóra.
Videót nem készítettem róla, de a megadott példára gond nélkül lefutott a program. Köszi a figyelmet! :)

D3am0n 2012.02.19. 12:13:15

+1 trófea: egy Qt-s példa felélesztése terminálból
Video:
www.youtube.com/watch?v=3XRVkWAqM_U

nb · http://fersml.blog.hu 2012.02.19. 20:47:12

@D3am0n: ehhez a feladathoz kérek a hosszt és bevágni a teszt futtatást, hogy nem romlott el a progi.

Toma89 2012.02.20. 18:14:30

Látom meg lett hosszabbítva a határidő a Második kisbajnokságnál, ezért újra leírnám az én megoldásomat:

char *
string_masolo (char *d, const char *s, int n)
{

while ( ( n-- ) > 0 && ( *d++ = *s++ ) )
;
return d;
}

A megadott példákra és az általam készített példákra is jó megoldást adott a program. Jelen esetben nincs szükség az "i" int típusú változóra, bőven elég a megadott "n" int típusú változó dekrementálása, ami a másolandó karakterek számát adja meg. Fontos, hogy postfix alakban történjen a dekrementálás a kifejezésben, mert így érhető el, hogy a megfelelő számú karakter másolódjon át. Ha szükséges csinálok hozzá videót, csak sajnos nincs mikrofonom, ezért maximum kommentben tudnám elmagyarázni, hogy mit is csinál a program. Köszönöm a figyelmet!

nb · http://fersml.blog.hu 2012.02.20. 19:01:54

@Toma89: mikrofont be kell szerezni :) de jó persze a szöveges leírás is, bár odáig még nem jutottam, hogy olvassam :)

Mert ennek a feladatnak a lényege a formalitás, azaz kérek egy hosszt, amit fent definiáltunk, akár kézzel megszámolt betűkkel (de mindjárt dobunk rá egy flex szösszenetet is :) illetve a képen látható teszthívásokkal a futtatás, hogy ugyanazt írja ki, ha ezek megvannak, akkor olvassuk tovább :)

Az említett flex pl. a hallgon:

nbatfai@hallg:~$ joe masodik_trofeahoz_szamlalo.l

%{
#include <stdio.h>
#include <string.h>

int szokozok_szama = 0, sorok_szama=0, betuk_szama = 0;
%}
%%

" " {++betuk_szama;++szokozok_szama;}
\n {++betuk_szama;++sorok_szama;}
. ++betuk_szama;
%%
int
main ()
{
yylex();
printf("A program hossza=%d", betuk_szama-szokozok_szama-sorok_szama );
return 0;
}

nbatfai@hallg:~$ flex -o masodik_trofeahoz_szamlalo.c masodik_trofeahoz_szamlalo.l
nbatfai@hallg:~$ gcc masodik_trofeahoz_szamlalo.c -o mtsz -ll

nbatfai@hallg:~$ ./mtsz <norbie_blogrol_c_reszlet
A program hossza=75

További +.5, aki megnyeri és saját flexxel számolja :) +1, ha nem ugyanazzal, mint itt én az imént.

vkrisz14 2012.02.20. 19:41:31

Kaptam 1,5 pluszpontot.
Szohossz.c forráskód felolvasása: 0,5 pont
Két végtelen ciklus: 1 pont

2012.02.20. 20:34:25

+1: egy Qt-s példa felélesztése, kipróbálása a Qt SDK-ból
www.youtube.com/watch?v=Lpp9eesrXtY

jazmine 2012.02.20. 21:29:19

@jakaba: remek! S ennek ugye az a poénja, hogy ha a két "exportod" beteszed a .profile-ba (vagy .bashrc-be, vagy .bash_profile-be, attól függ milyen rendszeren vagy) onnantól amikor parancssorban dolgozol mindig a trükkös printf fog menni. Ha rendszergazdaként a /etc/profile-be teszed, akkor minden júzernek ez a trükkös printf-je lesz.

Természetesen magában a glibc-ben is módosíthatsz, de nem érdemes széthekkelni magad alatt a rendszert, használjátok a két mutatott exportot.

D3am0n 2012.02.21. 03:41:39

Printf "hekkelés":
www.youtube.com/watch?v=YbB_kwCKabU

saját flex +rövidebb kód számolás:

%{
#include <stdio.h>
#include <string.h>

int betu = 0, nem = 0;
%}
NEM [ \t\n]
%%

{NEM}+ {++betu;++nem;}
. ++betu;

%%
int
main ()
{
yylex();
printf("Hossz: %d\n", betu-nem );
return 0;
}

Videó:
youtu.be/-KwUfIcaJyM

2012.02.21. 17:25:25

Be copy-pastelve megnyitja a linkeket, legalábbis nálam úgy már megy...

lacy122 2012.02.21. 18:49:15

Nálam is megnyitja copy-pastelve

nb · http://fersml.blog.hu 2012.02.21. 18:50:56

@mamenyaka: valóban bemásolva megynyitja.

@lacy122: Te is norbi vagy, vagy egyszerűen a hs_alt_Hs_Celera_chr2.fa.gz genomdarabod nincs meg: progpater.blog.hu/2011/04/14/egyutt_tamadjuk_meg

(egy jó programozó farzsebében mindig van pár genom :)

jakaba 2012.02.21. 20:03:22

+1:
Egy Qt-s példa felélesztése, kipróbálása parancssorból
youtu.be/yeiX0u3sKYM
+1:
egy Qt-s példa felélesztése, kipróbálása a Qt SDK-ból
www.youtube.com/watch?v=qR9CB0E6-0g

cccp.flashlight 2012.02.21. 21:32:26

nemtudom él-e még erre a Pluszpont-->

a5.sphotos.ak.fbcdn.net/hphotos-ak-ash4/407359_378233875537504_100000526852043_1355471_1255033587_n.jpg

"A C nyelv" című poszter...kb 2,5 méter:D és Mától Nyíregyházán (Derkovits út 80.) a BestComp-ban megtalálható:D

cccp.flashlight 2012.02.21. 21:34:15

ja és bocsánat a minőségért...telefonnal csináltam...de ha kell jobb kép a hétvégén tudom megoldani legközelebb:D

Toma89 2012.02.21. 22:05:14

Az előadáson megjelentektől fogadom csak el az alábbiakat:
3/1 trófea: lex-es szó, szám, sor, betű számláló (ugyancsak lásd. a megfelelő "robbanó" fóliát)

www.youtube.com/watch?v=S5fImCYfew0

Farkas Tamás: Itt van az én megoldásom. Jelen voltam a február. 15.-ei előadáson.

D3am0n 2012.02.21. 22:06:41

Harmadik kisbajnokság:
1. SHELL.
2. Zombi folyamat (végtelen for+sleep miatt).

jakaba 2012.02.21. 22:24:23

Filmajánló: 21 - Las Vegas ostroma
hungarian.imdb.com/title/tt0478087/
Ez pedig egy nagyon elmés film, egy zseniális rendezőtől, kellemes kikapcsolódás lehet:
Tökéletes Trükk
hungarian.imdb.com/title/tt0482571/

jakaba 2012.02.22. 10:07:07

++i-s:
#include <stdio.h>
main ()
{
int i;
for (i = 0; i < 3; ++i)
printf("%d ",i);
}
Eredménye: 0 1 2
Az i++-osnak szintén 0 1 2, tehát nincs különbség C-ben jelen helyzetnél, mindegy, hogy melyiket használjuk.
Magyarázat: a törzs hagtódik végre először, és csak aztán a 3. argumentum (i++/++i), és az, hogy post, vagy prefix módon inkrementáljuk az i-t, már mindegy.
az ++i-snél első körben i=0, kiíratódik, és a

Toma89 2012.02.22. 10:20:57

www.youtube.com/watch?v=igy3qcdLQHE&feature=youtu.be

Ahogyan a videoból is látszik, jelen esetben mindegy, hogy a for ciklus 3.argumentumában az i int típusú változó inkrementálása prefix vagy postfix alakban történik, a végeredmény ugyanaz. A 3. argumentum kiértékelése előtt mindig a 2.argumentum kiértékelése történik meg, és ha a kifejezés igaz igazságértékkel rendelkezik, akkor a ciklusmagban megadott utasítást vagy utasításblokkot hajtja végre a for ciklus és csak utána történik meg a 3. argumentum kiértékelése.

jakaba 2012.02.22. 10:37:41

#include <stdio.h>
int
main (void)
{
printf("%d ", printf ("%d\n", printf ("%d\n", (int) sizeof(char) * 8 )));
return 0;
}
A printf függvény a sikeresen kiírt karakterek számát adja meg visszatérési értékül. A sizeof(char) elé írt (int) nélkül nekem nem fordul le, de így az eredmény "8 2 2" lesz. A sizeof(char) értéke 1, tehát a char 1 bájton tárolódik, ezt felszorozzuk 8-al, így a legbelső printf 8-at fog kiírni.

jakaba 2012.02.22. 10:58:00

Első eset:
if (signal (SIGINT, jelkezelo) == SIG_IGN)
signal (SIGINT, jelkezelo);

Második eset:
if(signal(SIGINT, SIG_IGN) != SIG_IGN)
signal(SIGINT, jelkezelo);

Az első esetben megvizsgáljuk az if fejében, hogy a jelkezelés az előzőekben figyelmen kívül volt-e hagyva, ha igen, akkor ez nem fog változni, tehát továbbra sem fog megszakadni a program futása ctrl+c-re. Amennyiben nem volt az előzőekben figyelmen kívül hagyva (a signal visszatérési értéke a jelkezelő előző értéke), úgy a jelkezelésre a 'jelkezelo' függvényt fog meghívódni.
A második esetben, ha nem volt figyelmen kívül hagyva a ctrl+c általi megszakítás, akkor beállítja a jelkezelésre a "jelkezelo" függvényt. Ha figyelmen kívül volt hagyva, akkor továbbra is figyyelmen kívül lesz hagyva, hisz az if fejében meghívtuk a signal függvényt, és beállítottuk a SIG_IGN-t, ami nem csinál mást, mint figyelmen kívül fogja hagyni a ctrl+c általi megszakítás lehetőségét.

Vörös Főnix 2012.02.22. 12:37:35

if csere, gyakorlat második feladat: +fél pont

2012.02.22. 13:31:29

+1.5 PageRank program gyakrolaton

2012.02.22. 13:35:03

+0.5 az if-ek kozti "kulonbseg" laboron

appzsolt 2012.02.22. 13:54:41

+1.5 pagerank program gyakon

Toma89 2012.02.22. 14:48:15

+1.5 pagerank program gyakon

Badnewz 2012.02.22. 21:10:47

+1pont 2.gyakorlaton a procsra
+0.5 pont 3.gyakon if csere

Badnewz 2012.02.22. 21:52:46

AndrewPregh új nickname Badnewz

Schrödinger Macskája 2012.02.23. 09:24:14

Pagerank algoritmus, 1.5 pont. Csütörtök reggeli gyakorlat.

Kassen 2012.02.23. 15:55:38

Nem tudom, hogy ez a karakterhegyezés él-e még de az első esetben az strncpy-vel ugyan azt érjük el, mint a saját függvénnyel. Viszont mikor felcseréljük a for ciklusban a forrást és a célt, akkor figyelmeztet a program, hogy módosítani próbált, így nem fordul le.

Kassen 2012.02.23. 15:58:28

Ja, vagy ez csak laboron fogadható el, azért "labortrófea"? :D

thevr 2012.02.23. 17:52:59

+1.5 pont, PageRank (gyakorlat)

sonzi 2012.02.23. 17:53:20

PageRank +1,5 pont

lacy122 2012.02.23. 19:01:22

+ 1.5 pont PageRank program, csütörtök délutáni gyakorlaton

thevr 2012.02.24. 10:50:49

Írtam egy saját strncpy függvényt (lehet nem a legszebb megoldás, de működik):

int i = 0;

char *tmp=dest;
while(i!=limit)

{
*dest = *src;
dest++;
src++;
i++;
}
return tmp;

Lényegében úgy működik, hogy a függvény megkapja a forrás karaktertömböt és a cél karaktertömböt, valamint kap egy értéket, hogy mennyi karaktert másoljon át az egyikből a másikba, és eddig az értékig fog futni a while ciklus, ami karakterről karakterre lépeget.

nb · http://fersml.blog.hu 2012.02.24. 12:46:58

@komzsikjanos: éljünk együtt a játékkal, azaz olvassuk folyamatosan a többiek kommentjeit! Ennél a feladatnál, mint korábban is látható, kérünk egy méretet (erre még van, aki külön lexes számolót is készített) és a "teszt futásokat", hogy lássuk első körben, azokra hogy muzsikál :)

jakaba 2012.02.24. 14:59:12

Lex számláló, más kóddal + teszt. Számolja a sorokat, szavakat, karaktereket (szóközökkel és szóközök nélkül).
Videó:
youtu.be/PqAN5KVBOkM

jakaba 2012.02.24. 15:00:17

1. fólia, 59. dia: void, void *
kód:

int void1() { }
int void2(void) { }
main () {
void1();
void2();
void1(5);
//void2(5);
}

g++, és gcc közötti fordítási különbség, magyarázattal:
youtu.be/RoHAoppq66I

A g++ fordító, hogy ha nem deklarálunk a függvényben bemeneti paramétereket, alapértelmezettként void-ot fog venni, míg a gcc-nél ez nem mondható el, tehát jelen programkódnál a gcc le fog futni, míg a g++ hibával fog visszatérni (túl sok bemeneti paraméter).

KDániel 2012.02.25. 08:56:21

2012. 02. 23- 1.5 pontot kaptam a PageRank-os hiányos kód kiegészítésére.
Kiss Dániel

Toma89 2012.02.25. 16:56:21

www.youtube.com/watch?v=MwEfGB8qPP8

Itt van a saját másoló programom ill. saját lexikális elemzőm. A videon látható az előadás fólián megadott lexikális elemző. Szavakat, sorokat, betűket, számokat számlál meg az alap_copy.c és mycopy.c forráskódokban, míg a saját lexikális elemzőm a Sorokat, Vízszintes ill Függőleges tabulátorokat és Operátorokat számolja meg. [+*-/] operátorokat ill. betűk számát, csak utóbbi nem szerepel a kiíratásban. A hangsúly a sorok számán van. A rövidebb kódom 26 soros, az alap, fóliáról bemásolt másoló program pedig 32 soros. ( persze a sorok száma az egész forráskódra értendő, nemcsak a számláló függvényre.)

A saját másoló programomban a string_masolo függvényen belül elmaradt az i int típusú automatikusváltozó deklarálása, ugyanis az eredeti kódban az index kezelésnél volt szerepe, hogy csak a szükséges karakter szám másolódjon át az egyik tömbből a másikba és persze a tömb elejétől kezdve. Mivel a saját programomban a string_masolo függvényben mutatókezeléssel történik a karakter másolás ( és a mutatók mindig a paraméterül megadott tömb kezdőcímére mutatnak ), ezért nincs szükség az i int típusú változóra, elég ha a megadott n int típusú változót dekremenetáljuk, még pedig postfix alakban. Az n változó dekrementálásával ugyanazt a hatást érjük el, csak a megadott karakterszám másolódik át egyik tömbből a másikba. A függvény visszatérési értéke ugyanaz marad, mint az eredeti kódban, vagyis char *p pointer típus.
--------------------------------------

Farkas Tamás szerda 12-14 gyakorlaton PageRank hiányos kód kiegészítése: 1.5 pont.

Köszönöm a figyelmet! Jövőhéttől már lesz mikrofonom a videokhoz a megfelelő celebrálás érdekében! :)

Toma89 2012.02.25. 17:00:01

@Toma89: a string_masolo függvény kódja lemaradt a kommentből:

char *
string_masolo (char *d, const char *s, int n)
{
char *p = d;
while ( (n--) > 0 && ( *d++ = *s++) );

return p;
}

Valamint a saját lexikális elemző:

%{

#include <string.h>

int kar = 0,sor = 0, vtab = 0, htab = 0, op2 = 0;

%}

%%

[+-] ++op2;
[*/] ++op2;
\n ++sor;
\t ++htab;
\v ++vtab;
. ++kar;

%%

int
main ()
{

yylex ();

printf("NL:[%d]\nHTab:[%d]\nVTab:[%d]\nOperator:[%d]\n", sor,htab,vtab,op2);

return 0;

}

Toma89 2012.02.25. 21:18:47

3/1 trófea: egy Qt-s példa felélesztése, kipróbálása a Qt SDK-ból: www.youtube.com/watch?v=j-iNhPAlbCA

3/1 trófea: egy Qt-s példa felélesztése, kipróbálása parancssorból: www.youtube.com/watch?v=TFiUM_n1LlQ

2012.02.26. 17:43:43

"+3, ha adsz egy nem sin és társain alapuló megoldást (tehát semmi fgv., max az abs)"
Pattogó labda IF-ek nélkül feladat megoldása (kísérlet):
www38.zippyshare.com/v/51903865/file.html

nb · http://fersml.blog.hu 2012.02.26. 20:04:03

@mamenyaka: tehát miért lenne ebben a feladatban szerencsés a szálak használata? Nem erre gondoltam, hanem olyan megoldásra, amiben sin stb. függvény sincs.

lacy122 2012.02.26. 20:47:47

Tanár úr lacy122 kétszer szerepel a vadászlistán 1 és 1,5 ponttal!

2012.02.26. 21:08:04

@nb: Ebben a megoldásban nincs sin stb. függvény, de attól még nem hiszem, hogy elfogadható:
www35.zippyshare.com/v/99349082/file.html

Szóval csak azt nem értem, hogy mi miatt rossz a szálas megoldás, hiszen még csak logikai teszt sincs benne (kivéve a végtelen ciklust biztosító rész).
Azt, hogy miért szerencsés szálakkal így megoldani, azt nem tudom, de múködik és a feltételeknek eleget tesz.

nb · http://fersml.blog.hu 2012.02.27. 08:11:04

@mamenyaka: a szálas megoldásról még semmit nem mondtam, mivel még nem is néztem... mindössze azt kérdeztem, mi az eszme ebben a feladatban a szálak használatára...

A most küldött megoldásod viszont valóban "nem jó" abban az értelemben, hogy a

while (x == MAG)
{
xirany = -1;
break;
}

tk. nem más, sőt szimplán az, mint a következő feltételes utasítás:

if (x == MAG)
xirany = -1;

mamenyaka (törölt) 2012.02.27. 16:13:35

@nb: Nincs benne túl sok eszme, egyszerűen másképp nem tudom hogy kéne megoldani azt, hogy az x és az y irány egyszerre "működjön". A progran működése azon alapszik, hogy egy bizonyos idő elteltével egyszerűen irányt vált a labda (külön x és y irányban). Ez nagyjából egyezik a sin()-es megoldással, csak nincs benne sin().

mamenyaka (törölt) 2012.02.27. 19:06:21

@nb: Igen, átfutottam még régebben, de nem futtatam le. Én csak arra várok választ, hogy az új szálas megoldással mi a baj?
Amúgy az abs() függvény használata nem feltételez egy IF-et?

jazmine 2012.02.27. 21:23:20

@mamenyaka: mert az általad "if(felt) ut"-ként használt while(felt) ut break; konstrukciót ki tudod váltani abs()-al?

mamenyaka (törölt) 2012.02.27. 21:36:06

@jazmine: Elnézést, de nem értem a kérdést/választ.
A while() break; -es program hogy jön ide?

Ez az a program, amelykről kérdezem, hogy mi a baj vele:
www38.zippyshare.com/v/51903865/file.html

nb · http://fersml.blog.hu 2012.02.28. 15:08:42

@mamenyaka: csak annyiban, hogy kérdeztem, hogy ki tudod-e váltani abs()-al, mivel utaltál rá, hogy az is egy burkolt if.

Más: megnéztem a szálas programot. Abból a szempontból nagyon tetszik, hogy kreatív, hiszen ha jól látom, akkor a két szál időzítésén múlik minden, konkrétan az benne az ötlet, hogy megfelelő ideig növeli/csökkenti az x,y komponenseket. Sok múlik tehát az időzítésen, de van valami "élő" éppen e miatt a programodban :) tetszik annyira, hogy megadjam rá a 3 pontot! De inkább olyan "determinisztikusabb" megoldást vártam, mint amilyet magam adtam: a maradékos osztásos két fűrészfogból kihozni egy oda-vissza eggyel változó (azaz két oldalú) fűrészfogat.

Schrödinger Macskája 2012.02.29. 11:31:45

Mi történik, ha a hivasok_szama-nak definícióját leviszed a main elé?

A program nem fog lefordulni, arra hivatkozva, hogy nincsen deklarálva. Mivel a main függvény elé tettük be, ezért a fentebb lévő int fuggveny nem találja a deklarálását a hivasok_szama-nak, amikor a printf-ben hivatkozunk rá.

S ha emellett a régi helyén extern int hivasok_szama;extern deklarációt alkalmazol?

ebben az esetben ugyan úgy lefut a program, mint amikor az int fuggveny elé irtuk az int hivasok_szama-t.

Ha midnen igaz akkor 0.5-0.5 pont jár a válaszokra.
süti beállítások módosítása