Commit e11a4f92 by Szeberényi Imre

ecodings

parent 9af1298d
Ebben a feladatban 3 függvényt és egy sablont kell elkészítenie a specifikációknak megfelelően. Ebben a feladatban 3 függvényt és egy sablont kell elkészítenie a specifikációknak megfelelően.
Töltse le a feladathoz előkészített teljes könyvtárat a tantárgy Git tárolójából git kliens használatával, vagy akár Töltse le a feladathoz előkészített teljes könyvtárat a tantárgy Git tárolójából git kliens használatával, vagy akár
más eszközzel a [https://git.ik.bme.hu/Prog2/ell_feladat/Nem_OO](https://git.ik.bme.hu/Prog2/ell_feladat/Nem_OO) címről! más eszközzel a [https://git.ik.bme.hu/Prog2/ell\_feladat/Nem\_OO](https://git.ik.bme.hu/Prog2/ell_feladat/Nem_OO) címről!
**Feladatok:** **Feladatok:**
1. Valósítsa meg a _nem\_oo.h_ állományban deklarált függvényeket (_atoi()_, _strcat()_, _unique()_), melyek hasonlóan működnek, mint az azonos nevű szabványos függvények, de nem pontosan ugyanúgy. A függvények paramétereit és elvárt működését a _nem\_oo.h_ fájlban adtuk meg. 1. Valósítsa meg a _nem\_oo.h_ állományban deklarált függvényeket (_atoi()_, _strcat()_, _unique()_), melyek hasonlóan működnek, mint az azonos nevű szabványos függvények, de nem pontosan ugyanúgy. A függvények paramétereit és elvárt működését a _nem\_oo.h_ fájlban adtuk meg.
2. A _max.hpp_ fájlban valósítson meg a _sajat_ névtéren belül egy olyan sablont, ami alaptípusok esetén a paraméterként kapott érték közül a nagyobbat adja. 2. A _max.hpp_ fájlban valósítson meg a **sajat** névtéren belül egy olyan sablont, ami alaptípusok esetén a paraméterként kapott érték közül a nagyobbat adja.
3. Specializálja a sablont a _nem\_oo.h_ állományban deklarált _sajat::Komplex_ típusra úgy, hogy a nagyobb abszolút értékű Komplex számot adja vissza! Az abszolút érték kiszámításához használhatja a _sajat_ névtérben definiált _absKomplex_ inline függvényt. 3. Specializálja a sablont a _nem\_oo.h_ állományban deklarált _sajat::Komplex_ típusra úgy, hogy a nagyobb abszolút értékű Komplex számot adja vissza! Az abszolút érték kiszámításához használhatja a _sajat_ névtérben definiált _absKomplex_ inline függvényt.
4. Ellenőrizze a megvalósított függvények és sablonok működését a _nem\_oo\_test.cpp_ tesztprogrammal! 4. Ellenőrizze a megvalósított függvények és sablonok működését a _nem\_oo\_test.cpp_ tesztprogrammal!
Csak az elkészített **nem\_oo.cpp** és **max.hpp** fájlokat kell feltöltenie a portálra. Csak az elkészített **nem\_oo.cpp** és **max.hpp** fájlokat kell feltöltenie a portálra.
A _memtrace.h_ és _memtrace.cpp_ fájlok a memóriakezelés teszteléséhez szükségesek. Nem kell megértenie a működésüket! A _memtrace.h_ és _memtrace.cpp_ fájlok a memóriakezelés teszteléséhez szükségesek. Nem kell megértenie a működésüket!
**Javaslat:** **Javaslatok, és amire figyelni kell:**
- Fontos, hogy a megvalósítandó függvényeket a megfelelő **névtérben** definiálja. - Fontos, hogy a megvalósítandó függvényeket a megfelelő **névtérben** definiálja.
- A **using namespace valami** elérhetővé teszi a valami névtér neveit _scope_ operátor nélkül, de ettől nem keletkezik minden definíció/deklaráció a valami névtérben!
- Az _atoi()_ megvalósításakor ügyeljen arra, hogy csak helyes számot fogadjon el! - Az _atoi()_ megvalósításakor ügyeljen arra, hogy csak helyes számot fogadjon el!
- Helyes számjegysorozat végét white space, vagy sztring vége ('\0') jelzi. Minden más karakter előfordulása hiba. - Helyes számjegysorozat végét white space, vagy sztring vége ('\0') jelzi. Minden más karakter előfordulása hiba.
- Szintén hiba, ha a számjegysorozatban olyan számjegy, vagy betű fordul elő, ami nem érvényes az adott számrendszerben. B számrendszerben a B számjegy már nem fordulhat elő! - Szintén hiba, ha a számjegysorozatban olyan számjegy, vagy betű fordul elő, ami nem érvényes az adott számrendszerben. B számrendszerben a B számjegy már nem fordulhat elő!
- **Hiba** esetén dobjon **const char\*** típusú kivételt, melynek értéke az Ön **Neptun azonosítója** legyen! - **Hiba** esetén dobjon **const char\*** típusú kivételt, melynek értéke az Ön **Neptun azonosítója** legyen!
- Használja a [Horner-elrendezést](https://hu.wikipedia.org/wiki/Polinom) a szám (polinom helyettesítési) - Használja a [Horner-elrendezést](https://hu.wikipedia.org/wiki/Polinom) a szám (polinom helyettesítési)
értékének kiszámításához. Így elkerülheti a pow() használatát és n db szorzással és összeadással kiszámíthatja az értéket! értékének kiszámításához. Így elkerülheti a pow() használatát és n db szorzással és összeadással kiszámíthatja az értéket!
Például a decimális 346=((0\*10+3)\*10)+4)\*10+6, de a 3467=346\*10+7, azaz csak egy szorzással és egy összeadással több, és nem kellett tudni előre számjegek számát sem. Például a decimális 346=((0\*10+3)\*10)+4)\*10+6, de az egy számjegy hozzáfűzésével keletkező 3467=346\*10+7, azaz csak egy szorzással és egy összeadással több, és nem kellett tudni előre számjegek számát sem.
- Először mindenképpen oldja meg a feladatot a saját környezetében. A Jporta pontosan ugyanazt a tesztprogramot futtatja, amit letöltött a Git tárolóból. Egyedüli különbség, hogy a CPORTA makró definiált. - Először mindenképpen oldja meg a feladatot a saját környezetében. A Jporta pontosan ugyanazt a tesztprogramot futtatja, amit letöltött a Git tárolóból. Egyedüli különbség, hogy a CPORTA makró definiált.
- ELképzelhető olyan durva memóriahiba, amit az operációs rendszer csíp meg. Ilyenkor a Jportán 11-es megállási státus jelenik meg, ami azt jelenti, hogy a program illegális memóriaműveletet próbált végezni, amit az OS azonnali megállítással jutalmazott. - ELképzelhető olyan durva memóriahiba, amit az operációs rendszer csíp meg. Ilyenkor a Jportán 11-es megállási státus jelenik meg, ami azt jelenti, hogy a program illegális memóriaműveletet próbált végezni, amit az OS azonnali megállítással jutalmazott.
- Ügyeljen arra, hogy a **using namespace valami;** azt teszi lehetővé, hogy scope operátor használata nélkül is elérhetjük a valami névtér neveit, de ez nem jelenti azt, hogy mostantól minden definíció a valami névtérben keletkezik!
**Szorgalmi feladat:** **Szorgalmi feladat:**
......
...@@ -6,17 +6,17 @@ ...@@ -6,17 +6,17 @@
* ha a tovabbi kommentek nem olvashatok helyesen!) * ha a tovabbi kommentek nem olvashatok helyesen!)
* *
* *
* A C++ nem OO bvtseinek gyakorlshoz. * A C++ nem OO bõvítéseinek gyakorlásához.
* *
* *
* FELADATOK: * FELADATOK:
* 2. Valstson meg EBBEN a fjlban, a Sajat nvtren bell egy olyan sablont, ami * 2. Valósítson meg EBBEN a fájlban, a Sajat névtéren belül egy olyan sablont, ami
* alaptpusok esetn a paramterknt kapott rtk kzl a nagyobbat adja. * alaptípusok esetén a paraméterként kapott érték közül a nagyobbat adja.
* 3. Specializlja a sablont a nem_oo.h llomnyban deklarlt Komplex tpusra * 3. Specializálja a sablont a nem_oo.h állományban deklarált Komplex típusra
* gy hogy a nagyobb abszolt rtk Komplex szmot adja vissza! * úgy hogy a nagyobb abszolút értékû Komplex számot adja vissza!
* *
* gyeljen a helyes nvtr hasznlatra! * Ügyeljen a helyes névtér használatra!
* Tipp: Hasznlja a scope opertort, vagy nyisson nvteret! * Tipp: Használja a scope operátort, vagy nyisson névteret!
*/ */
#include "nem_oo.h" #include "nem_oo.h"
......
...@@ -3,7 +3,7 @@ Memoriaszivargas-detektor ...@@ -3,7 +3,7 @@ Memoriaszivargas-detektor
Keszitette: Peregi Tamas, BME IIT, 2011 Keszitette: Peregi Tamas, BME IIT, 2011
petamas@iit.bme.hu petamas@iit.bme.hu
Kanari: Szeberenyi Imre, 2013. Kanari: Szeberenyi Imre, 2013.
VS 2012: Szebernyi Imre, 2015., VS 2012: Szeberényi Imre, 2015.,
mem_dump: 2016. mem_dump: 2016.
meset felszabaditaskor: 2018. meset felszabaditaskor: 2018.
*********************************/ *********************************/
...@@ -207,10 +207,10 @@ START_NAMESPACE ...@@ -207,10 +207,10 @@ START_NAMESPACE
} }
} }
/* ha nincs hiba, akkor 0-val tr vissza */ /* ha nincs hiba, akkor 0-val tér vissza */
int mem_check(void) { int mem_check(void) {
initialize(); initialize();
if(dying) return 2; /* cmzsi hiba */ if(dying) return 2; /* címzési hiba */
if(registry.next) { if(registry.next) {
/*szivarog*/ /*szivarog*/
...@@ -220,7 +220,7 @@ START_NAMESPACE ...@@ -220,7 +220,7 @@ START_NAMESPACE
fprintf(fperror, "Szivargas:\n"); fprintf(fperror, "Szivargas:\n");
print_registry_item(registry.next); print_registry_item(registry.next);
registry.next = NULL; registry.next = NULL;
return 1; /* memria fogys */ return 1; /* memória fogyás */
} }
return 0; return 0;
} }
...@@ -320,7 +320,7 @@ START_NAMESPACE ...@@ -320,7 +320,7 @@ START_NAMESPACE
END_NAMESPACE END_NAMESPACE
/*******************************************************************/ /*******************************************************************/
/* C-stlus memriakezels */ /* C-stílusú memóriakezelés */
/*******************************************************************/ /*******************************************************************/
#ifdef MEMTRACE_C #ifdef MEMTRACE_C
...@@ -414,7 +414,7 @@ END_NAMESPACE ...@@ -414,7 +414,7 @@ END_NAMESPACE
#endif/*MEMTRACE_C*/ #endif/*MEMTRACE_C*/
/*******************************************************************/ /*******************************************************************/
/* C++-stlus memriakezels */ /* C++-stílusú memóriakezelés */
/*******************************************************************/ /*******************************************************************/
#ifdef MEMTRACE_CPP #ifdef MEMTRACE_CPP
...@@ -431,7 +431,7 @@ START_NAMESPACE ...@@ -431,7 +431,7 @@ START_NAMESPACE
void set_delete_call(int line, const char * file) { void set_delete_call(int line, const char * file) {
initialize(); initialize();
delete_call=pack(0,"",line,file); /*func rtke lnyegtelen, majd fellrjuk*/ delete_call=pack(0,"",line,file); /*func értéke lényegtelen, majd felülírjuk*/
delete_called = TRUE; delete_called = TRUE;
} }
...@@ -488,7 +488,7 @@ void operator delete[](void * p) THROW_NOTHING { ...@@ -488,7 +488,7 @@ void operator delete[](void * p) THROW_NOTHING {
} }
/* Visual C++ 2012 miatt kell, mert hklis, hogy nincs megfelel delete, br senki sem hasznlja */ /* Visual C++ 2012 miatt kell, mert háklis, hogy nincs megfelelõ delete, bár senki sem használja */
void operator delete(void * p, int, const char *) THROW_NOTHING { void operator delete(void * p, int, const char *) THROW_NOTHING {
memtrace::traced_delete(p,FDELETE); memtrace::traced_delete(p,FDELETE);
} }
......
#include <cstring> #include <cstring>
#include <cctype> #include <cctype>
#include "nem_oo.h" #include "nem_oo.h"
......
#ifndef NEM_OO_H #ifndef NEM_OO_H
#define NEM_OO_H #define NEM_OO_H
/** /**
* \file nem_oo.h * \file nem_oo.h
......
...@@ -84,7 +84,7 @@ int main() { ...@@ -84,7 +84,7 @@ int main() {
int i1 = 10; int i1 = 10;
int i2 = 200; int i2 = 200;
#ifndef CPORTA #ifndef CPORTA
cout << "max(" << i1 << ", " << i1 <<")= "; /// KIÍRÁS: max(10, 200)= cout << "max(" << i1 << ", " << i2 <<")= "; /// KIÍRÁS: max(10, 200)=
#endif // CPORTA #endif // CPORTA
cout << sajat::max(i1, i2) << endl; /// KIÍRÁS: 200 cout << sajat::max(i1, i2) << endl; /// KIÍRÁS: 200
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment