Difference between revisions of "LU-LKP-B10:MD4"

From DiLab
Jump to: navigation, search
(New page: {{TocRight}} =MD= ===Mērķi=== * ===Uzdevums=== X ===Jāiesniedz=== * Jāiesniedz C programmas pirmkods un Makefile. * Visi iesniedzamie faili jāsapako arhīvā LKP_MD1_vards_uzvards...)
 
Line 1: Line 1:
{{TocRight}}
{{TocRight}}
=MD=
=MD=
Procedūru izsaukumu steka izdruka.


===Mērķi===
===Mērķi===
* Apgūt steka struktūru un komunikācijas mehānismu starp procedūrām.
*
* Praktizēt atkļūdošanas metodes kas saistītas ar steka analīzi un procedūru izsaukumu steku.


===Uzdevums===
===Uzdevums===
Izveidot programmatūras palīg-rīkus, kas nodrošina procedūru izsaukumu steka izdruku.
X
Definēt tos failos md4.c un md4.h.
Izveidot testa failu test.c kas demonstrē izstrādāta palīg-rīka lietojumu ar piemēru, kur izdrukāts izsaukumu steks vismaz 3 izsaukumu dziļumā.

Failā md4.h deklaretas sekojošas divas (makro) funkcijas, kas izmantojamas analizējamajā failā:
* PCS_TAG() - birkas makro ko ievieto ka pirmo izsaukumu katras procedūras sākumā.
* PCS_PRINT() - funkcija, kas (uz stdout) drukā procedūru izsaukumu steku.
* Minētās funkcijas daļēji vai pilnīgi realizētas failā md4.c

Izdrukas formāts ir sekojošs:
CallStack at Failavārds, rindasNr.
fails, rindasNr., funkcijasVards, funkcijasAdrese, izsaucējaAtgriešanāsAdrese [,parametru vertības, ja realizēts]
fails, rindasNr., funkcijasVards, funkcijasAdrese, izsaucējaAtgriešanāsAdrese [,parametru vertības, ja realizēts]
fails, rindasNr., funkcijasVards, funkcijasAdrese, izsaucējaAtgriešanāsAdrese [,parametru vertības, ja realizēts]



===Jāiesniedz===
===Jāiesniedz===


* Jāiesniedz C programmas pirmkods un Makefile.
* Jāiesniedz C programmas pirmkods md4.c, md4.h, test.c un Makefile.
* Visi iesniedzamie faili jāsapako arhīvā LKP_MD1_vards_uzvards.tgz
* Visi iesniedzamie faili jāsapako arhīvā LKP_MD4_vards_uzvards.tgz
* Arhīva fails sūtāms pa epastu piekabē, ar sekojošu "Subject:" LKP MD1 vards uzvards
* Arhīva fails sūtāms pa epastu piekabē, ar sekojošu "Subject:" LKP MD4 vards uzvards


===Vērtējums===
===Vērtējums===


Uzdevums tiks vērtēts sekojoši:
Uzdevums tiks vērtēts sekojoši:
# 50% - Korekta steka izdruka uz pievienota piemēra,
# 80% - Korektu ievaddatu apstrāde un pareiza rezultātu izdruka.
# 50% - Korekta steka izdruka uz jebkura (pasniedzēja) piemēra,
# 20% - Nekorektu ievaddatu atpazīšana un kļūdas paziņojuma izdruka.
# +10% bonus - ja netiek izmantots un nav nepieciešams PCS_TAG(); bet var tikt izmantota kompilatora "debug" informācija.
# +10% bonus - ja tiek izdrukāti funkciju izsaukumi ar visiem parametriem.


===Piemēri===
===Piemēri===

Piemērs test.c failam
#include <stdio.h>
#include "md4.h"
int c(){
PCS_TAG();
int z=44;
PCS_PRINT(4);
return z-3;
}
int b(int i){
PCS_TAG();
int x;
x=x*c();
return x;
}
int a(int i){
PCS_TAG();
return b(i+4);
}
int main(){
PCS_TAG();
int i=0;
return a(i);
}




===Derīga informācija===
===Derīga informācija===

* [http://www.opengroup.org/onlinepubs/009695399/functions/fgets.html fgets()]


* Ieteikums: izstrādājiet programmatūru pakāpeniski. Piemēram, vispirms ielasiet un izdrukājiet datus. Tad pievienojiet datu analīzi un reģistrēšanu savās datu struktūrās. Tad pievienojiet datu analīzi lai tos sakārtotu izdrukai. Testējiet vispirms uz pareiziem datiem. tad uz kļūdainiem datiem.
* Ieteikums: izstrādājiet programmatūru pakāpeniski. Piemēram, vispirms ielasiet un izdrukājiet datus. Tad pievienojiet datu analīzi un reģistrēšanu savās datu struktūrās. Tad pievienojiet datu analīzi lai tos sakārtotu izdrukai. Testējiet vispirms uz pareiziem datiem. tad uz kļūdainiem datiem.



==J&A (jautājumi un atbildes)==
==J&A (jautājumi un atbildes)==

Revision as of 17:50, 19 October 2010

MD

Procedūru izsaukumu steka izdruka.

Mērķi

  • Apgūt steka struktūru un komunikācijas mehānismu starp procedūrām.
  • Praktizēt atkļūdošanas metodes kas saistītas ar steka analīzi un procedūru izsaukumu steku.

Uzdevums

Izveidot programmatūras palīg-rīkus, kas nodrošina procedūru izsaukumu steka izdruku. Definēt tos failos md4.c un md4.h. Izveidot testa failu test.c kas demonstrē izstrādāta palīg-rīka lietojumu ar piemēru, kur izdrukāts izsaukumu steks vismaz 3 izsaukumu dziļumā.

Failā md4.h deklaretas sekojošas divas (makro) funkcijas, kas izmantojamas analizējamajā failā:

  • PCS_TAG() - birkas makro ko ievieto ka pirmo izsaukumu katras procedūras sākumā.
  • PCS_PRINT() - funkcija, kas (uz stdout) drukā procedūru izsaukumu steku.
  • Minētās funkcijas daļēji vai pilnīgi realizētas failā md4.c

Izdrukas formāts ir sekojošs:

CallStack at Failavārds, rindasNr.
fails, rindasNr., funkcijasVards, funkcijasAdrese, izsaucējaAtgriešanāsAdrese [,parametru vertības, ja realizēts]
fails, rindasNr., funkcijasVards, funkcijasAdrese, izsaucējaAtgriešanāsAdrese [,parametru vertības, ja realizēts]
fails, rindasNr., funkcijasVards, funkcijasAdrese, izsaucējaAtgriešanāsAdrese [,parametru vertības, ja realizēts]


Jāiesniedz

  • Jāiesniedz C programmas pirmkods md4.c, md4.h, test.c un Makefile.
  • Visi iesniedzamie faili jāsapako arhīvā LKP_MD4_vards_uzvards.tgz
  • Arhīva fails sūtāms pa epastu piekabē, ar sekojošu "Subject:" LKP MD4 vards uzvards

Vērtējums

Uzdevums tiks vērtēts sekojoši:

  1. 50% - Korekta steka izdruka uz pievienota piemēra,
  2. 50% - Korekta steka izdruka uz jebkura (pasniedzēja) piemēra,
  3. +10% bonus - ja netiek izmantots un nav nepieciešams PCS_TAG(); bet var tikt izmantota kompilatora "debug" informācija.
  4. +10% bonus - ja tiek izdrukāti funkciju izsaukumi ar visiem parametriem.

Piemēri

Piemērs test.c failam

#include <stdio.h>
#include "md4.h"

int c(){
  PCS_TAG();
  int z=44;
  PCS_PRINT(4);
  return z-3;
}
  
int b(int i){
  PCS_TAG();
  int x;
  x=x*c();
  return x;
}

int a(int i){
  PCS_TAG();
  return b(i+4);
}

int main(){
  PCS_TAG();
  int i=0;
  return a(i);
}


Derīga informācija

  • Ieteikums: izstrādājiet programmatūru pakāpeniski. Piemēram, vispirms ielasiet un izdrukājiet datus. Tad pievienojiet datu analīzi un reģistrēšanu savās datu struktūrās. Tad pievienojiet datu analīzi lai tos sakārtotu izdrukai. Testējiet vispirms uz pareiziem datiem. tad uz kļūdainiem datiem.


J&A (jautājumi un atbildes)

J: Uzdevums pārāk grūts, vai var pagarināt termiņu?

A: Noteiktais termiņš paliek spēkā. Šis ir pirmais un vieglākais uzdevums kursā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.


Uz LKP kursa sākuma lapu.