Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Sfat achizitie AC Gree Fairy vs P...

MONITOR LG fara sonor !

Batalia pentru Bucuresti - ND, Fi...

Identificare font
 Samsung Galaxy A35

Sfat pentru aprinderea automata a...

Masina de copt paine - pareri

Cum reactivez Google Maps?
 Conectare tableta X220la Tv

Femeile tinere nu mai vor sa munc...

La mulți ani @un_dac!

La multi ani de Sfantul Gheorghe&...
 Job - Facultate sau certificare

Deadpool & Wolverine (2023)

sistem hibrid eoliana + panouri +...

Outlook e muta pe Android
 

Ajutor - Program calculare medie C#

- - - - -
  • Please log in to reply
33 replies to this topic

#1
Cozzmy13

Cozzmy13

    Active Member

  • Grup: Members
  • Posts: 1,464
  • Înscris: 15.04.2014
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
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,602
  • Înscris: 30.07.2003
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
Cozzmy13

Cozzmy13

    Active Member

  • Grup: Members
  • Posts: 1,464
  • Înscris: 15.04.2014
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
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,602
  • Înscris: 30.07.2003
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
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,235
  • Înscris: 24.02.2007
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
paulicaFX

paulicaFX

    Member

  • Grup: Members
  • Posts: 792
  • Înscris: 08.08.2011
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
sergiu37

sergiu37

    Member

  • Grup: Members
  • Posts: 328
  • Înscris: 13.11.2006
Î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
Cozzmy13

Cozzmy13

    Active Member

  • Grup: Members
  • Posts: 1,464
  • Înscris: 15.04.2014

 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
sergiu37

sergiu37

    Member

  • Grup: Members
  • Posts: 328
  • Înscris: 13.11.2006
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.

#10
Cozzmy13

Cozzmy13

    Active Member

  • Grup: Members
  • Posts: 1,464
  • Înscris: 15.04.2014
Da...

#11
Cozzmy13

Cozzmy13

    Active Member

  • Grup: Members
  • Posts: 1,464
  • Înscris: 15.04.2014
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 :P

Edited by Cozzmy13, 01 September 2014 - 08:49.


#12
Cozzmy13

Cozzmy13

    Active Member

  • Grup: Members
  • Posts: 1,464
  • Înscris: 15.04.2014
NEVERMIND.. sunt cam multe greseli

Edited by Cozzmy13, 01 September 2014 - 09:28.


#13
Cozzmy13

Cozzmy13

    Active Member

  • Grup: Members
  • Posts: 1,464
  • Înscris: 15.04.2014
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();
		}
	}
}



Momentan cand scrii "stop" tot iti spune ca nu e o nota. Posted Image

Edited by Cozzmy13, 01 September 2014 - 10:39.


#14
Cozzmy13

Cozzmy13

    Active Member

  • Grup: Members
  • Posts: 1,464
  • Înscris: 15.04.2014
/\
||
||

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
Cozzmy13

Cozzmy13

    Active Member

  • Grup: Members
  • Posts: 1,464
  • Înscris: 15.04.2014
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
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,235
  • Înscris: 24.02.2007
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
Cozzmy13

Cozzmy13

    Active Member

  • Grup: Members
  • Posts: 1,464
  • Înscris: 15.04.2014
Am facut (aproape) acelasi lucru si eu ca sa simplific totul, insa ai uitat sa pui un bool care sa testeze daca line contine stop si sa iasa din bucla Posted Image while ((line = Console.ReadLine()) != "stop") Posted Image

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
neagu_laurentiu

neagu_laurentiu

    Guru Member

  • Grup: Senior Members
  • Posts: 40,602
  • Înscris: 30.07.2003

 Cozzmy13, on 02 septembrie 2014 - 11:37, said:

Cum ai facut tu a devenit prea simplu si scurt , nu-mi place =))
Atunci pune carnatul ala de citiri si sa te vad la 1452 de introduceri !

Anunturi

Neurochirurgie minim invazivă 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

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate