Second Opinion
Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale. Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit. www.neurohope.ro |
Provocarea săptămânii – Output
Last Updated: Jan 11 2018 13:23, Started by
dani.user
, Dec 13 2017 18:27
·
0
#1
Posted 13 December 2017 - 18:27
Un set de provocari pe acelasi subiect pentru cine vrea sa-si testeze cunostiintele de C si/sau C++.
Nivel usor spre mediu (C++) Sa se implementeze o clasa ce imita std::cout, folosind printf. Adica sa pot scrie: std::string nume1 = "Ion"; const char* nume2 = "Vasile"; int suma = 10; ceva << nume1 << " e cu " << suma << " euro mai bogat decat " << nume2 << '\n'; Iar codul sa afiseze in consola (cu ajutorul printf) fix ce ar fi afisat daca as fi folosit std::cout in loc de ceva. E suficient daca suporta caractere, siruri (char*, std::string) si numere intregi (pozitive/negative). Nivel mediu spre greu (C++) Problema de mai sus, dar sa suporte si float/double alaturi de specificarea preciziei (setprecision) Nivel mediu (C ) Sa se implementeze o functie similara lui printf, doar pentru (siruri de) caractere si numere intregi. Functia se va folosi de puts pentru a afisa caracterele. Nivel mediu-ridicat (C++) Sa se implementeze o functie similara lui printf, doar pentru (siruri de) caractere si numere intregi, ce insa nu necesita specificarea tipurilor argumentelor. Adica, daca printf apelez ca: printf("%s e cu %d euro mai bogat decat %s\n', nume1, suma, nume2); Noua functie s-o apelez in felul urmator, ea dandu-si singura seama ca numele sunt siruri de caractere, pe cand suma e un intreg. functie("%% e cu %% euro mai bogat decat %%\n', nume1, suma, nume2); Edited by dani.user, 13 December 2017 - 18:28. |
#3
Posted 05 January 2018 - 00:48
O tentativa la primele 2 la 12 noaptea :
Spoiler
Ma cam nemultumeste abordarea in legatura cu precizia.
Edited by sftpdt, 05 January 2018 - 00:52. |
#4
Posted 05 January 2018 - 12:49
Aveam un printf facut mai de mult, asa ca m-am gandit sa implementez cout-ul cu el, momentan nu am suport pentru float-uri, doar pentru afisat string-uri si int-uri (baza 10 si 16). Ar trebui bagat niste error checking si niste cod mai generic pe la chestia cu bazele, dar o sa revin cu o versiune imbunatatita.
Spoiler
Edited by LittleWho, 05 January 2018 - 12:50. |
#5
Posted 05 January 2018 - 19:39
Felicitari pentru curaj
customPrint(unsigned precision) { if (precision <= 15) this->precision = precision; else this->precision = 5; } customPrint() { this->precision = 5; } Se cam obisnuieste folosirea sintaxei de initializare speciala a constructorilor. customPrint& operator<<(const double number) { char printArg[20] = "%."; char precisionStr[20]; sprintf(precisionStr, "%u", this->precision); strcat(printArg, precisionStr); strcat(printArg, "f"); printf(printArg, number); return *this; } O posibila imbunatatire: profitand de faptul ca preciziile disponibile sunt in numar redus, poti crea un array static cu ce trebuie trimis catre printf pentru fiecare valoare a preciziei. const value Cand pasezi by-value nu mai e atat de important const, dar poate preveni unele erori. customPrint setPrecision(const unsigned decimals) { return customPrint(decimals); } Nu-mi place ca returnezi o noua instanta a clasei de printare. Vezi daca reusesti sa folosesti manipulatori. outstream& operator<<(const manipulator& m) { if (m.precision != NOT_INITIALIZED_MANIPULATOR_FIELD) this->precision = m.precision; if (m.base != NOT_INITIALIZED_MANIPULATOR_FIELD) this->base = m.base; return *this; } Aici apare o problema de responsabilitati. outstream& n-ar trebui sa stie nimic legat de logica manipulatorilor (de exemplu n-ar trebui outstream sa stie ca manipulatorul modifica precizia) Edited by dani.user, 05 January 2018 - 20:11. |
#8
Posted 06 January 2018 - 22:41
dani.user, on 13 decembrie 2017 - 18:27, said: functie("%% e cu %% euro mai bogat decat %%\n', nume1, suma, nume2); template<typename T> void func(T t) { std::cout << t; } template<typename T, typename... Args> void func(T t, Args... args) { std::cout << t; func(args...) ; } func("Maria are ", 3, " mere si ", '5', " pere"); // Maria are 3 mere si 5 pere Pe principiul asta? Edited by sftpdt, 06 January 2018 - 22:41. |
#10
Posted 11 January 2018 - 13:23
Am gasit o solutie, intamplator, pentru cerinta cu printf-ul, nu e a mea, dar zic sa o postez oricum.
Spoiler
|
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users