Neurochirurgie minim invazivă
"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv. Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice. www.neurohope.ro |
Ajutor - Program calculare medie C#
Last Updated: Sep 28 2014 16:53, Started by
Cozzmy13
, Aug 31 2014 09:38
·
0
#1
Posted 31 August 2014 - 09:38
Bun, bun, bun...
Deci se da una bucata program de calculare a mediei si una bucata cerere de ajutor: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //Arata un mesaj de intampinare si asteapta apasarea unei taste. Console.WriteLine("Calculator de Medie v0.1, apasa Enter pentru a incepe. "); Console.ReadKey(); //Selecteaza calcularea cu medie Console.WriteLine("1-Calcul cu Teza "); Console.WriteLine("2-Calcul fara Teza "); string Varianta = Console.ReadLine(); int VariantaInt = Convert.ToInt32(Varianta); //Variante de calcul switch (VariantaInt) { case 1: Console.WriteLine("Introdu notele (pana la 7 note,daca nu ai atatea note scrii 0 ) si teza:"); Console.WriteLine("Note:"); string No1String = Console.ReadLine(); int No1 = Convert.ToInt32(No1String); string No2String = Console.ReadLine(); int No2 = Convert.ToInt32(No2String); string No3String = Console.ReadLine(); int No3 = Convert.ToInt32(No3String); string No4String = Console.ReadLine(); int No4 = Convert.ToInt32(No4String); string No5String = Console.ReadLine(); int No5 = Convert.ToInt32(No5String); string No6String = Console.ReadLine(); int No6 = Convert.ToInt32(No6String); string No7String = Console.ReadLine(); int No7 = Convert.ToInt32(No7String); Console.WriteLine("Teza:"); string TezaString = Console.ReadLine(); int Teza = Convert.ToInt32(TezaString); float Medie = (float)((No1 + No2 + No3 + No4 + No5 + No6 + No7) * 3 + Teza) / 4; Console.WriteLine("Media ta este: "+Medie+" ."); Console.ReadKey(); break; case 2: Console.WriteLine("Introdu notele (pana la 7 note,daca nu ai atatea note scrii 0 ):"); Console.WriteLine("Note:"); string No1String2 = Console.ReadLine(); int No12 = Convert.ToInt32(No1String2); string No2String2 = Console.ReadLine(); int No22 = Convert.ToInt32(No2String2); string No3String2 = Console.ReadLine(); int No32 = Convert.ToInt32(No3String2); string No4String2 = Console.ReadLine(); int No42 = Convert.ToInt32(No4String2); string No5String2 = Console.ReadLine(); int No52 = Convert.ToInt32(No5String2); string No6String2 = Console.ReadLine(); int No62 = Convert.ToInt32(No6String2); string No7String2 = Console.ReadLine(); int No72 = Convert.ToInt32(No7String2); float Medie2 = (float)(No12 + No22 + No32 + No42 + No52 + No62 + No72) / 7; Console.WriteLine("Media ta este: "+Medie2+" ."); Console.ReadKey(); break; default: Console.WriteLine("Acea nu este o varianta."); Console.ReadKey(); break; } } } } Deci, toate bune si frumoase, INSA la conversia din string in int BINEINTELES ca daca scrii altceva decat cifre da eroare si se inchide programul. Deci, intrebarea este, cum pot evita sa se intample asta?(Ma gandesc la niste propozitii loop inainte de conversie...) Totodata notele nu ar trebui sa fie mai mici decat 2 si nici mai mari de 10.(Iarasi ma gandesc la niste propozitii loop...) Deja am o avertizare... bravo mie. |
#2
Posted 31 August 2014 - 09:41
Tie iti place codul ala ? Citesti asa in nestire ? Pune intr-un loop o singura citire si salvezi in ce vrei tu valorile. Apoi s-a inventat try..catch pentru a prinde o exceptie. Iar cu aceste indicatii citesti pana cand totul respecta regulile fara a mari codul inutil.
Edited by neagu_laurentiu, 31 August 2014 - 09:42. |
#3
Posted 31 August 2014 - 09:45
Sunt incepator, daca vrei sa fii extrem de detaliat (chiar si mura-n gura) ca nu am inteles nimic din ce ai scris tu acolo , multumesc.
Si nu, nu imi place codul ala insa doar asa m-am gandit sa-l fac. |
#4
Posted 31 August 2014 - 09:48
Pune intr-o bucla doar o singura line Console.ReadLine(). Salvezi valorile intr-un vector. Cu try..catch prinzi exceptia/eroarea si nu contorizezi introducerea, e invalida iar bucla te intoarce iar la citirea unei noi valori pana totul respecta regulile tale.
Edited by neagu_laurentiu, 31 August 2014 - 09:49. |
#5
Posted 31 August 2014 - 09:51
Dupa ce faci ce ti s-a indicat, cat mai sanatos, din punct de vedere al utilizatorului, ar fi sa-l lasi sa introduca oricate note, separate prin virgula.
|
#6
Posted 31 August 2014 - 10:42
Poate ceva gen
private int ReadInteger() { while (true) { String text = Console.ReadLine(); try { return Convert.ToInt32(text); } catch (Exception e) {} } } Nu sunt sigur daca merge , dar ideea e sa citesti de la tastatura pana primesti un numar valid..tu ai putea adauga alte verificari gen daca 1 >= nr >=10 , etc |
#7
Posted 31 August 2014 - 10:50
În primul și-n primul rând programul ar trebui să ruleze corect.
Ia o foaie de hârtie dacă te ajută, dar fă-l să facă media corectă în primul rând. linia float Medie = (float)((No1 + No2 + No3 + No4 + No5 + No6 + No7) * 3 + Teza) / 4; e de scris la perle sau aberații. Legat de cum să verifici dacă un string e integer ți-am modificat puțin codul la prima conversie ca să ai o idee de cum s-ar putea face, eventual tot acolo poți pune și niște condiții cam în ce interval să fie numărul. https://dotnetfiddle.net/WWyp0v Edited by sergiu37, 31 August 2014 - 10:51. |
#8
Posted 31 August 2014 - 19:33
sergiu37, on 31 august 2014 - 10:50, said:
În primul și-n primul rând programul ar trebui să ruleze corect. Ia o foaie de hârtie dacă te ajută, dar fă-l să facă media corectă în primul rând. linia float Medie = (float)((No1 + No2 + No3 + No4 + No5 + No6 + No7) * 3 + Teza) / 4; e de scris la perle sau aberații. Legat de cum să verifici dacă un string e integer ți-am modificat puțin codul la prima conversie ca să ai o idee de cum s-ar putea face, eventual tot acolo poți pune și niște condiții cam în ce interval să fie numărul. https://dotnetfiddle.net/WWyp0v Acum am sesizat ca am gresit, deja cu greseala asta devine tot mai greu.. Trebuia sa fie: (((No1 + No2 + No3 + No4 + No5 + No6 + No7) / 7 ) * 3 + Teza) / 4 |
#9
Posted 31 August 2014 - 19:54
Da aia e o medie, dar dacă nu ai 7 note și pui zero cum scrii în mesajul ajutător tot nu e tocmai corect.
|
#11
Posted 01 September 2014 - 08:29
Revin cu un update... Am reusit sa fac ce a spus laurentiu (partial):
Am lasat pe user sa introduca oricate note vrea si spune stop cand a terminat. Valorile le scrie intr-o lista... Momentan nu am facut si calcule si tot insa cu siguranta arata mult mai bine... Ah si am folosit numai limba engleza ca ma descurc mai bine asa... using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { List<int> marksList = new List<int>(); bool markExit; bool markBool; int markNum; do { Console.Write("Introdu notele tale. Scrie stop pentru a opri: "); string mark = Console.ReadLine(); markExit = mark.Contains("stop"); if (markExit == true) { break; } markBool = int.TryParse(mark, out markNum); marksList.Add(markNum); } while (markNum < 1 || markNum > 10 || markBool == true); int[] marksArray = marksList.ToArray(); foreach (var mark in marksArray) { Console.Write(" "+mark.ToString()+""); } Console.ReadKey(); } } } Inca nu am adaugat protectie pentru numere mai mari/mai mici... Apropo, sunt (voi fi) doar in clasa a 9-a asa ca luati-ma usor Edited by Cozzmy13, 01 September 2014 - 08:49. |
#12
Posted 01 September 2014 - 09:18
NEVERMIND.. sunt cam multe greseli
Edited by Cozzmy13, 01 September 2014 - 09:28. |
#13
Posted 01 September 2014 - 10:33
Inca un Update... de data asta lucrurile chiar merg...
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { List<int> marksList = new List<int>(); bool markExit; bool markBool; int markNum; Console.WriteLine("Introdu notele tale. Scrie stop pentru a opri:"); do { string mark = Console.ReadLine(); markExit = mark.Contains("stop"); markBool = int.TryParse(mark, out markNum); if (markNum > 1) { if (markNum < 11) { marksList.Add(markNum); } else { Console.WriteLine("Aceea nu este o nota!"); } } else if (markExit == true) { Console.WriteLine("Notele au fost introduse"); } else { Console.WriteLine("Aceea nu este o nota!"); } if (markExit == true) { break; } } while (markBool == false); int[] marksArray = marksList.ToArray(); foreach (var mark in marksArray) { Console.Write(" " + mark.ToString() + ""); } Console.ReadKey(); } } } Edited by Cozzmy13, 01 September 2014 - 10:39. |
#14
Posted 01 September 2014 - 14:02
/\
|| || In bucla do-while trebuie setat markBool == true altfel se inchide la prima greseala Si tot se inchide cand scrii litere... hmm Cred ca e ceva cu try parse... Ok deci cand pun la bucla do-while ca si conditie true programul se inchide la pima greseala ce contine litere.. daca pun false se inchide dupa prima cifra (ceea ce e si normal)... Va trebui sa gasesc alta metodata... Edited by Cozzmy13, 01 September 2014 - 14:11. |
#15
Posted 01 September 2014 - 14:23
Rezolvat si problema asta... daca pun while (markBool == true || markNew == 0) merge ... try parse de 0 + false pentru litere si alte caractere.
Practic bucla se repeta si daca am false si daca am true, da' el nu si-a dat seama. ======================================== Totodata merge pus markBool == true si markBool = false nu e prea logic. ======================================== Am pus while (true) si e acelasi lucru am si uitat de buclele infinite de care am citi Edited by Cozzmy13, 01 September 2014 - 14:30. |
|
#16
Posted 01 September 2014 - 16:12
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { List<int> marks = new List<int>(); Console.WriteLine("Introdu notele tale. Scrie stop pentru a opri:"); string line; while ((line = Console.ReadLine()) != "stop") { int mark; if(int.TryParse(line, out mark) && mark > 0 && mark < 11) { marks.Add(mark); } else { Console.WriteLine("Aceea nu este o nota!"); } } foreach (var mark in marks) { Console.Write(mark.ToString() + " "); } Console.ReadKey(); } } } |
#17
Posted 02 September 2014 - 11:37
Am facut (aproape) acelasi lucru si eu ca sa simplific totul,
Insa daca pun " stop" nu prea cred ca va mai merge. Cum ai facut tu a devenit prea simplu si scurt , nu-mi place =)) Edited by Cozzmy13, 02 September 2014 - 11:38. |
#18
Posted 02 September 2014 - 11:51
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users