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

Húzz egy kártyát, megmondom ki vagy 2

2011.02.28. 17:41 nb

Bár nem tervezek minden laborkártya paklit itt poszt formájában megbeszélni, de a mai laborok azt sugallják, hogy még a mostanit szükséges lehet kicsit segíteni, mert ma számos hallgatót az mentett meg a negatív értékeléstől, hogy a kérdésekkel foglalkoztak saját fórumaikon (de ott vélelmezhetően hibásan kialakult szakmai álláspontokat tettek a magukévá). Javaslatom, hogy a kártyákat tartalmazó előadás kommentjeként kérdezzenek és kapjanak választ az érdeklődők, így a szélesebb nyilvánosság egyben védelmet is jelent. Nem beszélve arról, hogy a laborvezetők is ezt látják :)

Tehát röviden tárgyaljuk a 2. előadás laborkártyáit.

Állítsd precedencia szerint sorrendbe! Mondanom sem kell: könyv, jegyzet, bármi használható közben, mint a vizsgán, de itt gyorsan jöjjenek a válaszok! Természetesen az operátorok jelentését is tudni kell.

Itt azt várom, hogy a hallgató tudjon mutatni valahol egy precedencia táblázatot és megmutatni, hogy melyik precedenciája magasabb, alacsonyabb stb.

Mi a különbség az if-ek fejében a két kifejezés között (ha van)
if(b & 0x80 == 0) …
if((b & 0x80) == 0) …

"Az imént említett táblázatban" látható, hogy a == precije alacsonyabb, mint bitenkénti ÉS-é, ezért a zárójelek hiányában először hasonlít, utána ÉSel. Pedig a programozó szándéka nyilván az volt, hogy először maszkol, aztán hasonlít.

Alábbi kód kapcsán: mit mond a C a + operátor operandusainak kiértékelési sorrendjéről?
#include <stdio.h>

int
novel_eggyel (int *a)
{
  return ++ * a;
}

int
csokkent_eggyel (int *a)
{
  return -- * a;
}

int
main (void)
{
  int a = 0;
  printf ("%d\n", novel_eggyel (&a) + csokkent_eggyel (&a));

  a = 0;
  printf ("%d\n", csokkent_eggyel (&a) + novel_eggyel (&a));
  return 0;
}


 Hogy nem meghatározott, azaz minden olyan válasz, ami "balról-jobbra", "jobbról-balra" szavakkal kezdődik, az hibás. Ez arra is példa, hogy a kipróbálás itt nem az a szilárd talaj, amit megszoktunk, hogy általában az lehet... De csak gondolj bele, egyszer azt írod a progidba, hogy A+B, közvetlenül utána, de egy ugyanolyanra visszaállított szituációban, hogy B+A és az elsőre 1-et ad, a másodikra -1-et, az nyilván azt jelenti, hogy az ilyen kód írását kerüld el!

Ablokkosak elég szimplák, próbáld ki, ha mégis bizonytalan vagy.

Az strncpy man lapjáról "koppintott" implementáció és továbbfejlesztései lerágott csont, egy külön posztunk is volt erről.

Az érvényességi tartományról szóló kártyát érdemes kipróbálni, olyasmit kérdezhetünk ennek kapcsán, hogy a hivasok_szama miért extern?

A fork()-al "ködösített" hatáskör-élettartam elég szimpla, ha megfigyeled, hogy csak a gyerek ág növel, aztán pedig kilép... de erről is külön értekeztünk már.

Az tetszett, hogy a mutatós-mutogatós kártyát mindenki vágta:

Szólj hozzá!

Címkék: labor

TCAG, avagy a Humán Genom Projekt

2011.02.27. 12:07 nb

A UNIX típusú rendszerekben a fork() a mitózis.

Az témával kapcsolatos feladatok "széles" spektrumával tervezünk gyakorlatozni a laborokon, ez megér egy külön posztot, hogy ne csak a trófeák közti vadászatban bogarásszuk őket :)

Rántsuk le at emberi genom 2. kromoszómájának egy részét: ftp.ncbi.nlm.nih.gov/genomes/H_sapiens/Assembled_chromosomes/seq/

T, C, A, G betűkkel találkozunk, ahogyan hármasával egy fehérjét kódolnak. A következő kis progival (mivel nem feledhetjük, hogy kezdő programozók is vannak köztünk, ezért az ilyen egyszerűekkel kezdünk) tehát a következő kis progival átkódoljuk a sorozatot, a Javát tanítok  www.tankonyvtar.hu/informatika/javat-tanitok-1-1-1-080904 TCAG2Hexa osztályának mintájára két nukleotid bázisból egy hexadecimális betűt készítünk:

#include <stdio.h>
#include <unistd.h>

int
main (void)
{      
  char hexa_jegyek[] = {'A', 'B', 'C', 'D', 'E', 'F'};
  
  int paratlan = 0, elso=0, masodik=0, i = 0;
  
  while((i=getchar()) != EOF) {
    
    switch(i) {
      
    case 'T':
      masodik = 0;
      break;
    case 'C':
      masodik = 1;
      break;
    case 'A':
      masodik = 2;
      break;
    case 'G':
      masodik = 3;
      break;
    }
    
    if(paratlan) {
      
      int jegy = 4*elso + masodik;
      
      if(jegy<10)
	printf("%d", jegy);
      else
	printf("%c", hexa_jegyek[jegy-10]);
      
    }
    paratlan = !paratlan;
    elso = masodik;                        
  }        
} 

Az alábbi kis játék során megismerkedünk a (2. előadásban bevezetett) CompLearn csomag használatával.

  • Rántsuk le a humán genom 2. kromoszómájának első 1400 betűjét ftp.ncbi.nlm.nih.gov/genomes/H_sapiens/CHR_02/ (amit a hs_alt_Hs_Celera_chr2.fa.gz név alapján Hschr21400 néven mentünk most el, alul majd helso.human1minta)!
  • Generáljunk le 1000 hexa jegyet a Pi kifejtésének 1.000.000. jegyétől (piezer.txt, alul majd piezer.1000000)!
  • Az első előadás pszeudorandom kártyájával és a fenti tcag2hex kiírás további finomításával
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <sys/types.h>
    #include <unistd.h>
    int
    main (void)
    {
      int i, r;
      srand (time (NULL) + getpid ());
      for (i = 0; i < 2000; ++i)
        {
          r = (int) (16.0 * rand () / (RAND_MAX + 1.0));
    
          if (r < 10)
    	printf ("%d", r);
          else
    	printf ("%c", r - 10 + 'A');
    
        }
      printf ("\n");
      return 0;
    }
    
    nyomtassunk ki 2000 db véletlen jegyet (veletlen2000, alul majd rand.2000db)!
  •  Rántsunk még le a 3. emberi koromóból is 700 betűt (Hschr3700)!
  •  A C elegans fonalféreg II. kromójából is vegyünk valamekkora mintát (c2_2000) ftp.ncbi.nlm.nih.gov/genomes/Caenorhabditis_elegans/CHR_II/NC_003280.fna (ez a féreg közel áll a szívünkhöz az Orch OR tudatmodell miatt is, alul majd celeg.celegans)
  • ... s készítünk még pár mintát... a kutya (canis familiaris), a ló (equus caballus), a kakas (gallus gallus), a szarvasmarha (bos taurus) 2. kromójának elejéből, a Pi kifejtéséből, a csupa 1 jegyből, a 01-ekből álló állományokból:

batfai@kalapacs:~ $ ls -l mintak/
összesen 72
-rw-r--r-- 1 batfai batfai 2100 2011-02-27 18:49 celeg.celegans
-rw-r--r-- 1 batfai batfai  800 2011-02-27 18:20 egyes.8001es
-rw-r--r-- 1 batfai batfai 3220 2011-02-27 21:14 h11kromo.eleje
-rw-r--r-- 1 batfai batfai 3080 2011-02-27 21:17 h11kromo.kozepe
-rw-r--r-- 1 batfai batfai 3260 2011-02-27 21:16 h11kromo.vege
-rw-r--r-- 1 batfai batfai 1400 2011-02-27 17:24 helso.human1minta
-rw-r--r-- 1 batfai batfai  700 2011-02-27 17:24 hmaso.human2minta
-rw-r--r-- 1 batfai batfai 3448 2011-02-27 18:44 kakas.2k
-rw-r--r-- 1 batfai batfai 1400 2011-02-27 21:02 kutya.1400
-rw-r--r-- 1 batfai batfai 1190 2011-02-27 21:09 kutya.kozepe
-rw-r--r-- 1 batfai batfai 1127 2011-02-27 21:09 kutya.vege
-rw-r--r-- 1 batfai batfai 1190 2011-02-27 18:45 lo.2k
-rw-r--r-- 1 batfai batfai 1600 2011-02-27 18:27 nulegy.800par
-rw-r--r-- 1 batfai batfai 1000 2011-02-27 18:39 pi1000.0tol
-rw-r--r-- 1 batfai batfai 2000 2011-02-27 18:35 pi2000.0tol
-rw-r--r-- 1 batfai batfai 1000 2011-02-27 17:25 piezer.1000000
-rw-r--r-- 1 batfai batfai 2000 2011-02-27 17:24 rand.2000db
-rw-r--r-- 1 batfai batfai  700 2011-02-27 20:57 szarvasm.700
batfai@kalapacs:~ $
S lássuk, mit mutat ezekre a mintákra a CompLearn normalizált tömörítési távolsága alapján készített gráfja:

ncd -b -d mintak/ mintak/
maketree distmatrix.clb
neato -Tpng treefile.dot > tcag.png


 

Teker a tovább linkre, ha kíváncsi vagy a folytatásra!

Szólj hozzá!

Címkék: kutya pi kakas dns fehérjék homo sapiens szarvasmarha hexa c elegans humán genom canis familiaris tcag equus caballus gallus gallus bos taurus genetikai kód

süti beállítások módosítása