hmrneves Posted October 8, 2012 at 10:05 PM Report #478346 Posted October 8, 2012 at 10:05 PM Boas pessoal, estou aqui com um problema a resolver um exercicio em console app: a) Escreva um programa que peça ao utilizador um nome e um número inteiro (entre 1 e 20). Deverá mostrar esse nome um número de vezes igual a esse valor inteiro. Como faco isto? Eu tentei fazer com for e afins, contudo da erro porque eu n posso comparar uma string a um numero inteiro! :S Alguem me ajuda? Cumprimentos
HappyHippyHippo Posted October 8, 2012 at 10:07 PM Report #478348 Posted October 8, 2012 at 10:07 PM e porque razão deverás comparar uma string a um inteiro ? que código tens ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
hmrneves Posted October 8, 2012 at 10:09 PM Author Report #478349 Posted October 8, 2012 at 10:09 PM Porque eu preciso de imprimir na tela o tal nome que o user inseriu, as vezes do numero que meti em na variavel int.. Ou seja se int = 20, o nome tem de ser apresentado na tela 20 vezes, e n tou mm a ver como :S Cumprimentos
HappyHippyHippo Posted October 8, 2012 at 11:15 PM Report #478360 Posted October 8, 2012 at 11:15 PM ora se int = 20 onde entra a string ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Pedro B Posted October 9, 2012 at 12:01 AM Report #478368 Posted October 9, 2012 at 12:01 AM (edited) O HappyHippyHippo tem razão a string não entra nas contas.... Eu acho que se tu já usas-te o loop for e não conseguiste vais ter que rever a matéria.... isso é das coisas mais básicas, não leves a mal. Basicamente o for executa um comando ou um conjunto de comandos um número pre-determinado de vezes, este limite é a expressão que usas dentro dos parentesis quando crias o loop for... e acho que a resposta está dada... Só se quiseres que te postem aqui o código, mas acho que chegas lá sozinho. Edited October 9, 2012 at 12:01 AM by Pedro B
hmrneves Posted October 9, 2012 at 07:04 PM Author Report #478475 Posted October 9, 2012 at 07:04 PM Viva pessoal, claro que nao levo a mal, estou a aprender tenho de aceitar tudo o que e criticas! o programa e mais ou menos isto; pedir ao user um numero guardar o numero introduzido numa variavel pedir ao user um nome guardar o nome na variavel apresentar na tela o respectivo nome, o numero de vezes que o numero valer. Ex, nome = hmrneves, numero = 10 O programa tem de apresentar a variável nome 10 vezes na tela! e Isso com for n da, pois o nome tem de ser string :S Cumps,,
HappyHippyHippo Posted October 9, 2012 at 07:52 PM Report #478482 Posted October 9, 2012 at 07:52 PM o que te faz pensar que nós no fórum não percebemos o problema ? as perguntas feitas era para fazer tu pensares e não porque tinhamos dúvidas. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Pedro B Posted October 9, 2012 at 10:14 PM Report #478497 Posted October 9, 2012 at 10:14 PM (edited) ya, como o HappyHippyHippo disse, nós percebemos o problema, mas repara, a programação tem mesmo a ver com resolver problemas, não é mais do que isso. E para aprenderes tens de aprender a ver as coisas de uma forma que não vais conseguir se formos nós a chapar as respostas, tens que ser tu a pensar, para te habituares a pensar de uma certa forma e conseguires perceber os conceitos direitinho, não há melhor forma de perceber algo quando és tu a descobrir como funciona ou as suas implicações e aplicações e no caso, acredita que tu chegas rápido à solução, só tens de pensar um bocado. Por isso eu volto a explicar-te. A finalidade de teres um loop é tu poderes repetir um comando ou um conjunto de comandos um número finito de vezes, esse limite de repetições é dado pela expressão que usas para o loop. Mais uma dica, o loop for usa uma variável que serve como contador, mais nada, para determinar o tempo de vida do loop, que nada tem a ver com a string. Só por curiosidade, porque é que tu dizes que o facto de o nome ser do tipo string te impede de usar o loop for? Posta aí o código que tu pensas-te em usar para resolver o problema. Edited October 9, 2012 at 10:15 PM by Pedro B
Pedro B Posted October 10, 2012 at 12:49 AM Report #478509 Posted October 10, 2012 at 12:49 AM (edited) P.S. não tenhas medo de mostrar a forma como querias resolver isso ou como estavas a racicionar, é normal ao primeiro não se perceber e errar faz parte. E eu não quero postar-te o código aqui porque é crucial que tu consigas chegar lá sozinho, com o tempo vais perceber porquê 👍 E também não te postei nenhum exemplo com código porque em relação a essa questão, praticamente qualquer exemplo que uses com um for serve para tu resolveres o teu problema, mas assim eu acho que vais pegar só no código e não vais tentar perceber porque é que ele funciona e isso é muito, mas muito mau, porque os "pianistas" não vão longe nesta área.... É muito importante que percebas como as coisas funcionam e porque é que funcionam. Por isso é que prefiro explicar só por palavras e deixar aqui apenas o conceito e para dizer a verdade já te dei a solução 2 vezes. Acredita isso é bastante simples, tenho a certeza que vais chegar lá e ainda te vais rir no fim. Edited October 10, 2012 at 12:52 AM by Pedro B
hmrneves Posted October 11, 2012 at 07:04 PM Author Report #478758 Posted October 11, 2012 at 07:04 PM Viva pessoal, não me interpretem mal pf, eu não disse que aqui ninguém era capaz de entender o problema 😉 O meu raciocínio era , pedir o numero, pedir o nome e depois com um contador for, imprimir a string vezes o numero inserido. Acontece que logo cheguei a conclusão que nao posso meter strings e int num for.. Só que não consegui resolver mesmo!, Então hoje, fiz uma pesquisa muitíssimo mais aprofundada e conclui que se declarar var nome = string.Empty, no for posso meter la var e imprimir quantas vezes o numero valer.. Deixo o código comentado using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ex_5 { class Program { static void Main(string[] args) { /*uso var porque se usar string nome, nao a posso usar no for, * * por isso uso var de ["variavel" geral de texto] [nome da variavel] = [tipo] */ //declaracao e inicializacao de variaveis var nome = string.Empty; int num; //pede um numero ao user Console.Write("Insira um numero: "); num = int.Parse(Console.ReadLine()); //pede uma palavra/nome ao user Console.Write("Insira um nome: "); nome = Console.ReadLine(); //da uma linha de espaco Console.WriteLine("\n"); //condição logica que previque que o user insira numeros abaixo de 1 e maiores que 20 if (num < 1 || num > 20) { //informa que o numero inserido é invalido Console.Write("O numero inserido é invalido. Por favor insira um numero valido entre 1 e 20.\n"); //pede para inserir novamente um novo numero Console.Write("\fInsira um novo numero: "); //le o numero para a variavel inteira num = int.Parse(Console.ReadLine()); } //contador para repetir a palavra pelo numero de vezes que o num possuir //como nao posso usar variaveis de tipo string no for, uso var como ["variavel" geral de texto] for (var i = 0; i < num; i++) { //imprime o nome as vezes que a variavel num possuir Console.WriteLine(nome + ";"); }//fim do ciclo for //informa o user para premir uma tecla para sair da app Console.WriteLine("\n\n\n\nPrima qualquer tecla para sair da aplicação"); //aguarda a inserção de uma tecla Console.ReadKey(); } } } Haverá outras maneiras? 😛 Agradeço o vosso tempo.. Cumprimentos
HappyHippyHippo Posted October 11, 2012 at 07:23 PM Report #478760 Posted October 11, 2012 at 07:23 PM o que acontece se o input do utilizador for ? : > 24 > Nome > 22 IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
hmrneves Posted October 12, 2012 at 09:22 PM Author Report #478922 Posted October 12, 2012 at 09:22 PM o que acontece se o input do utilizador for ? : > 24 > Nome > 22 So permiti a entradas entre 1 e 20, dado ao enunciado do exercício 😉
HappyHippyHippo Posted October 12, 2012 at 10:12 PM Report #478934 Posted October 12, 2012 at 10:12 PM So permiti a entradas entre 1 e 20, dado ao enunciado do exercício 😉 o que o enunciado diz não é o que o utilizador faz tens de começar a meter na cabeça que o que diz no enunciado sobre limites ou restrições dos dados de entrada não é dizer que não vai entrar mas sim que tens de validar os dados de entrada para ver se estão dentro desses limites e ou restrições. são coisas diferentes IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Pedro B Posted October 14, 2012 at 12:00 AM Report #479054 Posted October 14, 2012 at 12:00 AM (edited) Primeiro, uma observação: Imagina que o utilizador insere o valor 24 para a variável num. O que iria acontecer é que o programa ia entrar naquele if, mas depois, dentro desse if, se o utilizador voltasse a inserir o valor 24, o que te parece que iria acontecer aqui? Em segundo lugar, acho que já sei qual é o problema a que te estavas a referir quando disses-te que não podias usar a variável nome como string e tives-te que a declarar como var e então usar: string.Empty. Repara, sendo C# uma linguagem OOP, ao escreveres "string.Empty", tu estás a aceder a uma propriedade da classe string, e no caso, "Empty", é o valor (se se pode chamar assim), que representa uma string vazia. Então , se estás a utilizar uma propriedade da classe string, porque é que não podes declarar nome como string? Este problema vai-te aparecer muitas vezes em situações onde esta não é a melhor forma de o resolver. O que se passa é que quando tu crias uma instância de uma classe, e não usas um construtor, que é o que acontece quando declaras uma string, por exemplo: string nome; é que é criada uma instância da classe string que não aponta para nada e isto acontece sempre que declarares uma variável dessa forma, sem usar um construtor, ou uma outra instância já inicializada, por exemplo: string nome1 = "Hello"; string nome2 = nome1; // aqui ambas as variáveis são inicializadas correctamente , porque quando não usas um construtor ou uma outra instância já inicializada ou até mesmo determinadas propriedades dessa classe que representam valores passiveis de serem representados por esses tipos de dados o que é criado é uma instância em que os atributos não apontam para posições em memória e estão todos vazios. Logo, quando tu crias uma instância de uma classe, tens de inicializar essa instância/objecto e como em C# tudo são objectos, é necessário inicializar todas as variável que usares, por exemplo com o construtor default: new <nome_da_classe>(); . Se bem que a string é uma excepção à regra se bem me lembro, eu penso que para string não podes usar nada do género: String nome = new String(); mas posso estar enganado, mas eu acho que já usei isso e que deu erro, mas não te dou certezas. Contudo é perfeitamente possivel fazeres isto: string nome = "hello"; // ou string nome = string.Empty; // ou string nome1 = "hello"; string nome2 = nome1; Portanto, tu podes perfeitamente declarar: string nome = string.Empty e não vai haver nenhum erro, porque tu inicializas a variável, mas não lhe atribuis é nenhum valor. Vê o que significa a keyword null e vais perceber o que digo, com, "não apontam para nada" e vais perceber melhor o que te estou a tentar explicar. E no for estás a perceber isto mal. Vê, agora que tens o código, repara, a variável "i" está ali para quê? Ela controla o limite de vezes que o ciclo é executado. Mas vamos ver isto do ponto de vista deste problema, aqui a var "i" serve para contar o número de vezes que o nome é imprimido no ecrã. Por isso, o que é que o tipo de dados da variável "i" tem a ver para o tipo de dados da variável que vai guardar o nome? Pensa, quais os tipos de dados que guardam valores que servem para quantificar? Por outras palavras, os valores 1, 2, 3, etc... pertencem a que tipo de dados? Será que a variável "i" reamlente depende do tipo de dados do input? Porque é que dizes que não podes usar uma string no ciclo for? Será mesmo necessário, ou melhor, fará mesmo sentido, neste caso, usar uma string no ciclo for, quando a única coisa que queres é contar? E por acaso, podes usar variáveis do tipo string no loop for, mas isto aqui não te serve de nada, é só uma curiosidade. Sabes o que é ASCII ? ASCII é uma codificação para caracteres. O que o ASCII faz é atribuir a cada caracter um valor, décimal, hexadecimal ... portanto tu podes usar uma variável string no loop for, mas precisas é de incrementar, decrementar, etc... o seu valor ASCII e não a variável propriamente dita, porque em casos normais tu não vais fazer contas do género: a+a = 194 Outra nota, é boa prática que quando lês algo do teclado verifiques se o que acabas-te de ler, realmente serve como uma representação válida do tipo de dados para o qual queres converter esse input, porque pode acontecer de não ser. E aí o programa dá erro.... Edited October 14, 2012 at 12:21 AM by Pedro B
Pedro B Posted October 14, 2012 at 12:34 AM Report #479057 Posted October 14, 2012 at 12:34 AM (edited) P.S. Dá uma vista de olhos naquilo que são construtores, das classes. E para que servem. Talvez o conceito de apontadores em C te dê uma melhor percepção do conceito por detrás da keyword null, e já agora como te disse antes, vê para que serve a keyword null e mais importante, o seu significado. E revê melhor a utilização dos loops. E vê o loop while ( isto já é uma dica 😉 ). Edited October 14, 2012 at 12:35 AM by Pedro B
hmrneves Posted October 14, 2012 at 09:01 PM Author Report #479154 Posted October 14, 2012 at 09:01 PM Boas pessoa, um GRANDE OBRIGADO pelo vosso tempo dispensado, ja ando a estudar melhor isso ;D Melhores Cumps
Pedro B Posted October 15, 2012 at 06:48 PM Report #479245 Posted October 15, 2012 at 06:48 PM 😉 cumprimentos
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now