Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #58 da revista programar. Faz já o download aqui!

Xedoc

Tradução de Algoritmo para C#

Mensagens Recomendadas

Xedoc    0
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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    169
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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Xedoc    0
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 ? :)

Editado por apocsantos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    169
bioshock

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.

Querer aprender é isto: http://lmgtfy.com/?q=c%23+tutorial -> 2º Link -> várias lições.

Podes começar nesta http://www.csharp-station.com/Tutorial/CSharp/Lesson02

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Xedoc    0
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 ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    169
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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Xedoc    0
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());
					}
		}
	 }

}
}

Editado por Rechousa
Formatação de código

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    169
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..

Editado por bioshock

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rechousa    61
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.

Editado por Rechousa

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Xedoc    0
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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.