Chirurgia spinală minim invazivă
Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical. Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale. www.neurohope.ro |
Critici tehnice bilaterale
#1
Posted 06 April 2018 - 13:58
WinstonMontana, on 06 aprilie 2018 - 12:01, said: mai jos ai nucleul codului care face ce vrei tu(codul a fost compilat cu Microsoft Visual Studio): #include "stdafx.h" #include <string> #include <iostream> #include <vector> using namespace std; struct elev { string nume; int nota; elev(string nume0, string nota0) { nume = nume0; nota = (nota0 != "10") ? (int)nota0[0] - 48 : 10; //vezi https://www.asciitable.com/, coloanele Dec si Chr incepand cu Dec = 48 } }; int main(){ string fisier[17] = { "[se ignora acest rand]", "Gigel", "3", "Miaunel", "10", "Gargamel", "5", "Broscuta", "9", "Patratel", "4", "Costica", "3", "Luta", "9", "Asparaghel","5" }; //construim catalogul nostru vector<elev> catalog; for (int i = 1; i <= (17-2); i++) { catalog.push_back(elev(fisier[i], fisier[i + 1])); } //construim listarea elevilor in ordine descrescatoare a notelor string rezultat = ""; for (int i = 10; i >= 1; i--) { for (auto &elev : catalog) { if (elev.nota == i) { rezultat += elev.nume + ", "; } } rezultat = rezultat.substr(0, rezultat.size()-2); cout << "nota " << i << " au elevii:" << (rezultat.size() == 0 ? "nici unul" : rezultat)<<endl; rezultat = ""; } system("PAUSE"); return 0; }outputul este: O solutie logica, dar cam de nota 6-7 daca e sa avem pretentii. Observatiile mele:
Edited by dani.user, 06 April 2018 - 22:33. |
#2
Posted 06 April 2018 - 15:01
Quote
Ce e stdafx.h? Eu stiu ce e, dar initiatorul putin probabil. Iar daca tot avem precompiled header, de ce sunt headerele de baza incluse separat (defeats the purpose) Quote
De ce e folosit acel 0 in cadrul elev(string nume0, string nota0)? Quote
De ce se face referire la ascii table pentru a justifica valoarea lui 48, cand se poate scrie direct '0'? Quote
De ce se face parsare manuala string -> int? Poate tu si multi veti spune ca asta este un feature,dar nu este un mecanism intern expus programatorului, mecanims care nu a mai fost acoperit in momentul publicarii limbajului Quote
De ce e hardcodat inputul sub forma unui array de stringuri? Utilizarea stringstream e mult mai asemanatoare cerintei care zice de citirea dintr-un fisier Quote
De ce e introdus un rand doar pentru a-l ignora? Quote
Constante magice: 17, 2... Se pot evita cu totul chiar in forma actuala Quote
Rezultatul separa valorile prin ", " cand cerinta specifica separare prin spatiu Quote
system("pause"), folosit pentru a aduce beneficii neglijabile, e un risc destul de mare din punct de vedere al securitatii in C++. Statistica spune ca numarul acestora este cam zero ! Pe scurt: Dpdv pedagocig, nucleul algoritmului face o ceea ce trebuie sa faca, folosind o structura dedicata denumite "elev" pt a stoca datele necesare. Sub aspect pedagogic este un program care invata userul cum sa foloseasca o structura create de el si ii arata cum sa faca un program evitand pointerii pe cat se poate Totodata , acest program arata ca se poate limita pe cat posibil folosirea C-ului in C++. Acum am unele observatii pentru tine: atunci cand redactezi un program pentru incepatori in scop pedagogig, nu mai folosi boost sau alte 3rd party API-uri. atunci cand redactezi un program pentru incepatori in scop pedagogig nu mai folosi stream-uri sau alte liburi de streaming. atunci cand redactezi un program pentru incepatori in scop pedagogic in C++, incearca sa folosesti struct sau clase pentru a invata incepatorii cum sa inceapa sa gandeasca un program in OOP A da si inca o chestie: eu habar n-am C++, nici C si nici Visual Basic, sau C# dar asta nu ma impiedica sa scriu programe in limbajele pe care nu le cunosc atat timp cat stapanesc OOP & OOAD & Design Patterns Ce am observat eu este ca majortitatea celor care scriu in C++ de fapt scriu in C iar codul lor, in 90 % nici macar nu se atinge de C++ C++ este implementarea OOP in viziunea lui Stroustroup, dar nu trebuie sa fie unica.Oricine isi poate creea prorpiul C++ daca isi face un framework care implementeaza OOP-ul si C-ul. |
#3
Posted 06 April 2018 - 17:06
WinstonMontana, on 06 aprilie 2018 - 15:01, said:
atunci cand redactezi un program pentru incepatori in scop pedagogig, nu mai folosi boost sau alte 3rd party API-uri. Nu redactez programe pentru incepatori ce trantesc o cerinta si asteapta sa le rezolve altii temele. Ofer ocazional solutii mai interesante pentru altii ce mai citesc pe aici si care au trecut de nivelul "sa se". WinstonMontana, on 06 aprilie 2018 - 15:01, said:
atunci cand redactezi un program pentru incepatori in scop pedagogig nu mai folosi stream-uri sau alte liburi de streaming. Aproape toate cerintele din exercitii/examene/concursuri solicita citirea datelor dintr-un si scrierea rezultatelor intr-un fisier. Vor/nu vor, de streamuri nu scapa. WinstonMontana, on 06 aprilie 2018 - 15:01, said:
atunci cand redactezi un program pentru incepatori in scop pedagogic in C++, incearca sa folosesti struct sau clase pentru a invata incepatorii cum sa inceapa sa gandeasca un program in OOP Cand dezbat o problema de structuri de date & algoritmi, caut sa exprim cat mai simplu & clar acel algoritm. Daca OOP ma ajuta ocazional in acest scop, foarte bine; altfel n-are ce cauta. Mai repede ma folosesc de elemente functionale. WinstonMontana, on 06 aprilie 2018 - 15:01, said:
A da si inca o chestie: eu habar n-am C++, nici C si nici Visual Basic, sau C# dar asta nu ma impiedica sa scriu programe in limbajele pe care nu le cunosc atat timp cat stapanesc OOP & OOAD & Design Patterns Viata nu se rezuma la OOP. C++ e un limbaj multiparadigma, iti ofera destule solutii fara legatura cu OOP. WinstonMontana, on 06 aprilie 2018 - 15:01, said:
Ce am observat eu este ca majortitatea celor care scriu in C++ de fapt scriu in C iar codul lor, in 90 % nici macar nu se atinge de C++ De acord. |
#4
Posted 06 April 2018 - 17:39
dani.user, on 06 aprilie 2018 - 17:06, said:
Ofer ocazional solutii mai interesante pentru altii ce mai citesc pe aici si care au trecut de nivelul "sa se". Quote
Aproape toate cerintele din exercitii/examene/concursuri Quote
Cand dezbat o problema de structuri de date & algoritmi, caut sa exprim cat mai simplu & clar acel algoritm. OOP -ul nu se rezuma la clase si obiecte , OOP-ul inseamna insusi modelarea realitati in limbaj abstract. Toate relatiile intre evenimente si concepte din viata reala sunt legate de acelasi principii pe care OOP-ul le gestioneaza.Paradigma OOP transforma modelul din realitate in modul informational. Folosita cum trebuie aceasta paradigma,cu ajutorul ei poti usor programa in limbaje de programare pe care nici nu le stii. Quote
Daca OOP ma ajuta ocazional in acest scop, foarte bine; altfel n-are ce cauta. Pentru cine stie OOP-ul este de fapt OOP si OOAD impreuna. Quote
Mai repede ma folosesc de elemente functionale. care(zic eu si banuiesc) ca orice programator ar trebui s-o stapaneasca. The success of AOP has been almost viral and nearly all areas in Software Engineering and Programming Quote
Viata nu se rezuma la OOP. C++ e un limbaj multiparadigma, iti ofera destule solutii fara legatura cu OOP. OOP-ul se combina cu OOAD-ul si asa rezulta AOP-ul care este paradigma limbajelor functionale. Edited by WinstonMontana, 06 April 2018 - 17:42. |
#5
Posted 01 May 2018 - 11:39
Esti plin de acronime si foarte sfatos, dar progamelul ala din primul post e un kkt. Si asta nu pentru ca nu stii C++, ci pentru ca nu respecta reguli de baza, cum ar fi hardcodarile. Folosesti cind array, cind vector. In plus folosesti struct cu membrii publici, desi ai o logica la nota, ceea ce nu prea are nici o treaba cu OOP de care tot vorbesti
Daca aveai cea mai mica idee despre OOP, ai fi facut o clasa care face toate calculele alea, folosind principii OOP sanatoase si functii care fac un singur lucru etc blabla. Insasi implementarea este vai de capul ei, nu exista nici un motiv sa citesti datele dintr-un fisier intr-un vector de elevi si apoi sa iterezi de 10 ori prin vector. Macar daca eliminai elevul din vector dupa ce-l gaseai, dar nici de aia n-ai fost in stare. Sigur ca pentru aia trebuia sa folosesti altceva decit vector, oare ce... Conversia de la string la int este extrem de comica. Nota 7 data de user.dani este exagerata Practic dovedeste cit se poate de bine ce-am spus in celalat thread, ca degeaba stii un limbaj, daca-l schimbi nu inseamna c-o sa-l stii pe celalalt, pentru ca esti foarte destept. Pur si simplu folosesti chestii de care habar n-ai, pentru ca "asa l-a pus IDE-ul" sau faci aberatii lingvistice cum ar fi "nume = nume0", ca cica "nu vreau sa folosesc pointeri". De parca nu se poate scrie "this->nume = nume", aia e folosire de pointeri |
#6
Posted 08 May 2018 - 22:56
WinstonMontana, on 06 aprilie 2018 - 15:01, said:
Nici eu nu stiu, Visual Studio mi l-a pus.El stie elev(string nume0, string nota0) { nume = nume0; nota = (nota0 != "10") ? (int)nota0[0] - 48 : 10; //vezi https://www.asciitable.com/, coloanele Dec si Chr incepand cu Dec = 48 } for (int i = 1; i <= (17-2); i++) { WinstonMontana, on 06 aprilie 2018 - 15:01, said:
ca sa nu am : nume = nume ( si nu vreau sa folosesc pointeri) WinstonMontana, on 06 aprilie 2018 - 15:01, said:
Pentru ca metoda pedagogica foloseste array-uri ,doarece gandirea umana intelege mai repede conceptul de "colectie" decat cel de "streaming" Deoarece cerinta spune ca numele trebuie sa fie puse pe numere impare si notele pe numere pare, iar fisiere nu poate incepe cu o nota. Abordarea ce mai simplista a acestei probleme in particular - in stil mai "scolaresc"(ca asa e si cerinta), ar fi sa se creeze un array de 10 stringuri(cel mai simplu ar fi cu <string>, dar nici c-style nu e chiar rocket science), fiecare index fiind nota - 1, iar pentru fiecare nota sa se concateneze numele... WinstonMontana, on 06 aprilie 2018 - 15:01, said:
Deoarece cerinta spune ca numele trebuie sa fie puse pe numere impare si notele pe numere pare, iar fisiere nu poate incepe cu o nota. WinstonMontana, on 06 aprilie 2018 - 15:01, said:
timp cat stapanesc OOP & OOAD & Design Patterns WinstonMontana, on 06 aprilie 2018 - 17:39, said:
Programez in limbaje functionale, si OOP-ul sta la baza acestora. OOP-ul se combina cu OOAD-ul si asa rezulta AOP-ul care este paradigma limbajelor functionale. Nu vad logica in ce faci, dar din toate interactiunile rezulta asta: te chinui sa inveti cate un limbaj, citesti tot felul de chestii pe net despre tot felul de acronime, dupa care vii pe aici si te pretinzi programator, trantesti termenii aia despre care citesti la nimereala fiind evident ca nu intelegi mai nimic, mai bagi cate o bucata de cod varza si pentru un incepator(nu m-ar sa fie copy-paste modificat, din alte surse), spui tot felul de chestii lipsite de sens... Edited by Geth, 08 May 2018 - 23:12. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users