Jump to content
Xedoc

Tradução de Algoritmo para C#

Recommended Posts

Xedoc

Boas pessoal,

Eu ainda estou a iniciar-me em C#, ao inicio estava mais em cima de C mas passei para C#. Estava a tentar traduzir um algoritmo para me adaptar às diferenças da lingua mas recebo erros e mais erros. Um deles diz-me que me falta um " ; " no lugar de um número entre outros que não entendo. Aqui deixo o que tentei traduzir e se alguém me puder dar o mesmo mas sem erros agradecia imenso porque de facto não entendo.

Isto foi feito em modo console

		static void Main(string[] args)
	{
		const pi == 3,14
		var n,r,s,lo,l,c: float

		Console.WriteLine("1. Surface cercle");
		Console.WriteLine("2. Surface carré");
		Console.WriteLine("3. Surface rectangle");
		Console.WriteLine("4. Quitter");
		Console.WriteLine("Tapez votre choix");
		Console.ReadLine(n);

		while n <= 0 || n > 4 do

			Console.WriteLine("choix erroné. Recommencez");
			Console.WriteLine("1. surface cercle");
			Console.WriteLine("2. surface carré");
			Console.WriteLine("3. surface rectangle");
			Console.WriteLine("4. quitter");
			Console.WriteLine("tapez votre choix");
			Console.ReadLine(n);

		//endwhile

		while n != 4 do
				switch n do
					case 1: Console.WriteLine(" rayon ");
						Console.ReadLine(r);
						while r < 0 do
							Console.WriteLine("Erreur");
							Console.ReadLine(r);
						//endwhile
						S == pi * r * r;
						Console.WriteLine("surface" + S);

					case 2: Console.WriteLine("côté");
						Console.ReadLine(c);
						while c < 0 do
							Console.WriteLine("erreur");
							Console.ReadLine(c);
						//endwhile
						S == c*c;
						Console.WriteLine("surface" + S);

					case 3: Console.WriteLine("largeur");
							Console.ReadLine(l);
							while l<0 do
								Console.WriteLine("erreur");
								Console.ReadLine(l);
							//endwhile
								Console.WriteLine("longueur");
								Console.ReadLine(lo);

								while lo < 0 do
									Console.WriteLine("erreur");
									Console.ReadLine(lo);
								//endwhile
								S == 1 * lo;
								Console.WriteLine("surface" + S);
					//endswitch
					Console.WriteLine("1. surface cercle");
					Console.WriteLine("2. surface carré");
					Console.WriteLine("3. surface rectangle");			
					Console.WriteLine("4. quitter");
					Console.WriteLine("tapez votre choix");
					Console.ReadLine(n);

					while n <= 0 || n > 4 do
						Console.WriteLine("choix erroné. Recommencez");
						Console.WriteLine("1. surface cercle");
						Console.WriteLine("2. surface carré");			
						Console.WriteLine("3. surface rectangle");
						Console.WriteLine("4. quitter");
						Console.WriteLine("tapez votre choix");
						Console.ReadLine(n);
					//endwhile
		//endwhile
//end

Share this post


Link to post
Share on other sites
bioshock

Hm, nah. Ninguém te faz o trabalho de casa, quando se vê linhas como:

Console.ReadLine©;

Volta cá com pequenos excertos de código e quando tiveres vontade de aprender.

Share this post


Link to post
Share on other sites
Xedoc

-.-

Se não quisesse aprender não estaria aqui. Seja como for, não entendo como é que aparece "Console.ReadLine©;" quando não era isso que estava escrito no programa. Eu fiz copy paste e isso postou assim mesmo.

Este sim é o correcto:

static void Main(string[] args)
	{
		const pi == 3,14
		var n,r,s,lo,l,c: float

		Console.WriteLine("1. Surface cercle");
		Console.WriteLine("2. Surface carré");
		Console.WriteLine("3. Surface rectangle");
		Console.WriteLine("4. Quitter");
		Console.WriteLine("Tapez votre choix");
		Console.ReadLine(n);

		while n <= 0 || n > 4 do

			Console.WriteLine("choix erroné. Recommencez");
			Console.WriteLine("1. surface cercle");
			Console.WriteLine("2. surface carré");
			Console.WriteLine("3. surface rectangle");
			Console.WriteLine("4. quitter");
			Console.WriteLine("tapez votre choix");
			Console.ReadLine(n);

		//endwhile

		while n != 4 do
				switch n do
					case 1: Console.WriteLine(" rayon ");
						Console.ReadLine( r );
						while r < 0 do
							Console.WriteLine("Erreur");
							Console.ReadLine( r );
						//endwhile
						S == pi * r * r;
						Console.WriteLine("surface" + S);

					case 2: Console.WriteLine("côté");
						Console.ReadLine( c );
						while c < 0 do
							Console.WriteLine("erreur");
							Console.ReadLine( c);
						//endwhile
						S == c*c;
						Console.WriteLine("surface" + S);

					case 3: Console.WriteLine("largeur");
							Console.ReadLine(l);
							while l<0 do
								Console.WriteLine("erreur");
								Console.ReadLine(l);
							//endwhile
								Console.WriteLine("longueur");
								Console.ReadLine(lo);

								while lo < 0 do
									Console.WriteLine("erreur");
									Console.ReadLine(lo);
								//endwhile
								S == 1 * lo;
								Console.WriteLine("surface" + S);
					//endswitch
					Console.WriteLine("1. surface cercle");
					Console.WriteLine("2. surface carré");
					Console.WriteLine("3. surface rectangle");			
					Console.WriteLine("4. quitter");
					Console.WriteLine("tapez votre choix");
					Console.ReadLine(n);

					while n <= 0 || n > 4 do
						Console.WriteLine("choix erroné. Recommencez");
						Console.WriteLine("1. surface cercle");
						Console.WriteLine("2. surface carré");			
						Console.WriteLine("3. surface rectangle");
						Console.WriteLine("4. quitter");
						Console.WriteLine("tapez votre choix");
						Console.ReadLine(n);
					//endwhile
		//endwhile
//end

Pequenos excertos do código quer dizer que devo dividir o código em 3 ou mais partes ? :)

Edited by apocsantos

Share this post


Link to post
Share on other sites
Xedoc

Isso continua a não ser querer aprender. Estás a traduzir algo que nem fazes ideia do que estás a traduzir, basta olhar para a forma como estás a instanciar as variáveis.

Obrigado pelos links.

Só uma pergunta básica.

Eu tinha gravado o projecto e agora abri este mesmo projecto neste caso "Program.cs" mas agora nem me aparece os erros nem aquele icone tipo "play". Alguma ideia como faço para voltar a ver os tais erros que me dão ?

Share this post


Link to post
Share on other sites
bioshock

Experimenta fazer build ao projecto para ele te dar o output dos erros. O build, se a memória não me falha, em Visual Studio é F5.

Share this post


Link to post
Share on other sites
Xedoc

bioshock, segui os teus links, consegui fazer a maioria porque só me dá um erro ao compilar dizendo " identifier expected " já vi e revi o código e não descubro o que raio se passa. Antes estava a dar um erro mas porque estava a dizer ao programa para converter uma variável para " single " ou seja float quando no inicio estava definida como double. Mas agora não sei o que se passa. Se puderes dá uma vista de olhos que eu não sei mais o que fazer.

{
class Program
{
	static void Main(string[] args)
	{

/* "Error	1	Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix to create a literal of this type	H:\Traduction\Traduction\Program.cs	12	30	Traduction" ( Isto acontece se eu meter um ponto na constante " pi " logo no inicio. Se meto uma virgula ele diz isto. "Error	1	Identifier expected	H:\Traduction\Traduction\Program.cs	12	32	Traduction". O erro aponta sempre para o 3.14 da constannte */

		const float pi = 3,14;
		float r,s,lo,l,c;
		float S;
		int n;
		Console.WriteLine("1. Surface cercle");
		Console.WriteLine("2. Surface carré");
		Console.WriteLine("3. Surface rectangle");
		Console.WriteLine("4. Quitter");
		Console.WriteLine("Tapez votre choix");
		n = Convert.ToInt32(Console.ReadLine());

		while (n <= 0 || n > 4)
		{
			Console.WriteLine("choix erroné. Recommencez");
			Console.WriteLine("1. surface cercle");
			Console.WriteLine("2. surface carré");
			Console.WriteLine("3. surface rectangle");
			Console.WriteLine("4. quitter");
			Console.WriteLine("tapez votre choix");
			n = Convert.ToInt32(Console.ReadLine());

		}

		while (n != 4)
		{
				switch (n)
				{
					case 1: Console.WriteLine(" rayon ");
						r = Convert.ToSingle(Console.ReadLine());
						{
						while (r < 0)
							Console.WriteLine("Erreur");
							r = Convert.ToSingle(Console.ReadLine());
						}
						S = (pi * r * r);
						Console.WriteLine("surface" + S);

					case 2: Console.WriteLine("côté");
						c = Convert.ToSingle(Console.ReadLine());
						{
						while (c < 0)
							Console.WriteLine("erreur");
							c = Convert.ToSingle(Console.ReadLine());
						}
						S = c*c;
						Console.WriteLine("surface" + S);

					case 3: Console.WriteLine("largeur");
							l = Convert.ToSingle(Console.ReadLine());
							{
							while (l<0)
								Console.WriteLine("erreur");
								l = Convert.ToSingle(Console.ReadLine());
							}
								Console.WriteLine("longueur");
								lo = Convert.ToSingle(Console.ReadLine());
								{
								while (lo < 0)
									Console.WriteLine("erreur");
									lo = Convert.ToSingle(Console.ReadLine());
								}
								S = 1 * lo;
								Console.WriteLine("surface" + S);
				}
					Console.WriteLine("1. surface cercle");
					Console.WriteLine("2. surface carré");
					Console.WriteLine("3. surface rectangle");			
					Console.WriteLine("4. quitter");
					Console.WriteLine("tapez votre choix");
					n = Convert.ToInt32(Console.ReadLine());
					{
					while (n <= 0 || n > 4)
						Console.WriteLine("choix erroné. Recommencez");
						Console.WriteLine("1. surface cercle");
						Console.WriteLine("2. surface carré");			
						Console.WriteLine("3. surface rectangle");
						Console.WriteLine("4. quitter");
						Console.WriteLine("tapez votre choix");
						n = Convert.ToInt32(Console.ReadLine());
					}
		}
	 }

}
}

Edited by Rechousa
Formatação de código

Share this post


Link to post
Share on other sites
bioshock

Eu ia-te perguntar em que IDE estás a trabalhar..mas acho que é desnecessário, porque em Visual Studio esse teu código arrebenta por tudo que é lado.

E não, não tiveste a ler, pelo menos não com atenção, os tutoriais. Porque na lição 3 (logo a seguir à 2 que eu te recomendei) têm o seguinte:


switch (myInt)
{
case 1:
 Console.WriteLine("Your number is {0}.", myInt);
 break;
case 2:
 Console.WriteLine("Your number is {0}.", myInt);
 break;
case 3:
 Console.WriteLine("Your number is {0}.", myInt);
 break;
default:
 Console.WriteLine("Your number {0} is not between 1 and 3.", myInt);
 break;
}

E eu não vejo um único break..e decerto queres dar a conotação do break.

Os floats são tratados com um "f" depois do valor.

const float pi = 3.14f;

E vejo aí ciclos mal feitos..

Edited by bioshock

Share this post


Link to post
Share on other sites
Rechousa

Olá,

Para além de que podias ter um método só para desenhar o menu, assim:

private static void showMenu(bool ShowErrorMessage)
{
if (ShowErrorMessage)
{
	Console.WriteLine("choix erroné. Recommencez");
}
Console.WriteLine("1. surface cercle");
Console.WriteLine("2. surface carré");
Console.WriteLine("3. surface rectangle");
Console.WriteLine("4. quitter");
Console.WriteLine("tapez votre choix");
}

E convertendo o teu código para usar o método para desenhar o menu:

{
	class Program
	{
			static void Main(string[] args)
			{

/* "Error	   1	   Literal of type double cannot be implicitly converted to type 'float'; use an 'F' suffix to create a literal of this type	   H:\Traduction\Traduction\Program.cs	 12	  30	  Traduction" ( Isto acontece se eu meter um ponto na constante " pi " logo no inicio. Se meto uma virgula ele diz isto. "Error   1	   Identifier expected	 H:\Traduction\Traduction\Program.cs	 12	  32	  Traduction". O erro aponta sempre para o 3.14 da constannte */

					const float pi = 3,14;
					float r,s,lo,l,c;
					float S;
					int n;
					showMenu(false);
					n = Convert.ToInt32(Console.ReadLine());

					while (n <= 0 || n > 4)
					{
  						 showMenu(true);
							n = Convert.ToInt32(Console.ReadLine());

					}

					while (n != 4)
					{
									switch (n)
									{
											case 1: Console.WriteLine(" rayon ");
													r = Convert.ToSingle(Console.ReadLine());
													{
													while (r < 0)
															Console.WriteLine("Erreur");
															r = Convert.ToSingle(Console.ReadLine());
													}
													S = (pi * r * r);
													Console.WriteLine("surface" + S);

											case 2: Console.WriteLine("côté");
													c = Convert.ToSingle(Console.ReadLine());
													{
													while (c < 0)
															Console.WriteLine("erreur");
															c = Convert.ToSingle(Console.ReadLine());
													}
													S = c*c;
													Console.WriteLine("surface" + S);

											case 3: Console.WriteLine("largeur");
															l = Convert.ToSingle(Console.ReadLine());
															{
															while (l<0)
																	Console.WriteLine("erreur");
																	l = Convert.ToSingle(Console.ReadLine());
															}
																	Console.WriteLine("longueur");
																	lo = Convert.ToSingle(Console.ReadLine());
																	{
																	while (lo < 0)
																			Console.WriteLine("erreur");
																			lo = Convert.ToSingle(Console.ReadLine());
																	}
																	S = 1 * lo;
																	Console.WriteLine("surface" + S);
									}
	   						 showMenu(false);
											n = Convert.ToInt32(Console.ReadLine());
											{
											while (n <= 0 || n > 4)
		   						 showMenu(true);
													n = Convert.ToInt32(Console.ReadLine());
											}
					}
			 }

	}
}

Ainda podia ser melhorado.

PS: Não corrigi os erros que o @bioshock referiu e bem.

Edited by Rechousa

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Share this post


Link to post
Share on other sites
Xedoc

bioshock eu li o que me deste mas não é que eu tenha decorado tudo. Conforme o que fazia e o que não sabia ia verificar. Esqueci-me por completo dos breaks :|

Obrigadão pela ajuda, o programa já funciona mas está muito confuso. Vou testar o que o Rechousa disse. Amanhã darei novidades sobre como está, mais duvidas podem surgir.

Quando se começa a apanhar o jeito é muito fixe programar. lol

Abraço.

Share this post


Link to post
Share on other sites
bioshock

Não decores. Tenta perceber o porquê das coisas. Assim que compreenderes, nunca mais te esqueces. :thumbsup:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.