Java ::: Desafios e Lista de Exercícios Resolvidos ::: Laços de Repetição |
Exercício Resolvido de Java - Usando o laço do...while para pedir ao usuário para informar números inteiros e calcular a quantidade de números positivos, negativos, a soma e a médiaQuantidade de visualizações: 9616 vezes |
Pergunta/Tarefa: Escreva um programa Java que usa o laço do...while para ler números inteiros até que o valor lido seja igual a 0. Em seguida mostre a quantidade de valores positivos e negativos, a soma dos valores e a média aritmética (sem incluir o valor 0 na contagem e no cálculo da média). A média deverá ser exibida como um valor de ponto flutuante. Sua saída deverá ser parecida com a mostrada abaixo: Informe um número inteiro (0 para sair): 5 Informe um número inteiro (0 para sair): -4 Informe um número inteiro (0 para sair): 3 Informe um número inteiro (0 para sair): 8 Informe um número inteiro (0 para sair): -2 Informe um número inteiro (0 para sair): 0 Quantidade de números positivos: 3 Quantidade de números negativos: 2 A soma dos números lidos é: 10 A média aritmética é: 2.0 Veja a resolução comentada deste exercício usando Java console: package exercicios; import java.util.Scanner; public class Exercicios { public static void main(String[] args) { // vamos fazer a leitura usando a classe Scanner Scanner entrada = new Scanner(System.in); // declaração das variáveis int numero, quantLidos = 0, soma = 0; int quantPositivos = 0, quantNegativos = 0; // laço do...while que repetirá até que o usuário informe o valor 0 do { // lê o primeiro ou próximo número System.out.print("Informe um número inteiro (0 para sair): "); numero = Integer.parseInt(entrada.nextLine()); if(numero > 0){ // o número é positivo? quantPositivos++; } else if(numero < 0){ // o número é negativo? quantNegativos++; } // soma este número à soma já existente soma += numero; // aumenta a contagem dos números lidos if(numero != 0){ // não incluir o 0 para sair do programa na contagem quantLidos++; } } while(numero != 0); // condição de parada do laço if(quantLidos == 0){ System.out.println("Você não informou nenhum número."); } else{ System.out.println("Quantidade de números positivos: " + quantPositivos); System.out.println("Quantidade de números negativos: " + quantNegativos); System.out.println("A soma dos números lidos é: " + soma); System.out.println("A média aritmética é: " + ((soma * 1.0) / quantLidos)); // note a multiplicação de soma por 1.0 para gerar um valor de ponto flutuante // antes da divisão } } } |
Delphi ::: Dicas & Truques ::: Ponteiros, Referências e Memória |
Como usar ponteiros na linguagem Delphi - Aprenda a usar ponteiros em DelphiQuantidade de visualizações: 24016 vezes |
O Delphi, assim como C e C++ permite o uso de ponteiros, uma das ferramentas mais poderosas de programação e presente em códigos mais elaborados, tais como estruturas de dados. Para entender ponteiros, é preciso lembrarmos do conceito de variáveis. Uma variável, em determinados momentos, possui várias propriedades ou atributos, a saber, um nome, um valor e o tipo de dados que poderá ser armazenado na mesma. Uma variável possui também um endereço na memória do computador e o seu nome não é nada mais que um apelido para tal endereço. Ponteiros também possuem um nome, um valor e um tipo de dados. A diferença é que ponteiros, em vez de guardar valores tais como inteiros, strings, caracteres, etc, guardam o endereço de outras variáveis (ou o endereço de outros ponteiros, o que resulta em um ponteiro para um ponteiro). Assim, um ponteiro é uma forma indireta de se acessar o conteúdo de uma outra variável. Veja, por exemplo, as seguintes declarações de variáveis: var valor: integer; pvalor: ^integer; Aqui nós temos uma variável valor do tipo Integer e uma variável pvalor que é um ponteiro para um Integer. Veja agora como atribuir valores a estas variáveis: procedure TForm1.Button1Click(Sender: TObject); var valor: integer; pvalor: ^integer; begin // atribui um valor à variável valor valor := 20; // vamos atribuir à pvalor o endereço de valor pvalor := @valor; // vamos usar o ponteiro pvalor para alterar o // valor de valor pvalor^ := 30; // vamos obter o novo valor da variável valor ShowMessage('Valor de valor: ' + IntToStr(valor)); end; Veja que usamos o operador @ para obtermos o endereço da variável valor e guardá-lo no ponteiro pvalor. Em seguida usamos o símbolo ^ para acessar o valor da variável para a qual o ponteiro está apontando. Este processo é chamado de desreferenciamento (dereferencing). Em resumo, o símbolo ^ pode ser usado de duas formas: na frente de um tipo de dados, para indicar que a variável está sendo declarada como ponteiro e após o nome de uma variável do tipo ponteiro para indicar que queremos acessar o valor da variável para a qual o ponteiro está apontando atualmente e não o valor do ponteiro, que seria simplesmente um valor inteiro representando um endereço de memória. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Delphi ::: Data Access Controls (Controles de Acesso a Dados) ::: TClientDataSet |
Como usar o método FindField para pesquisar um campo no TClientDataSet do Delphi e retornar um objeto da classe TFieldQuantidade de visualizações: 14111 vezes |
O método FindField pode ser usado quando queremos pesquisar um campo no TClientDataSet e retornar um objeto da classe TField. Este método possui a seguinte assinatura:function FindField(const FieldName: string): TField; Veja um trecho de código no qual eu mostro como encontrar um campo chamado "autor" em um ClientDataSet e retornar seu valor no registro atual: procedure TForm3.Button3Click(Sender: TObject); var campo: TField; begin // vamos obter o campo com o nome "autor" no ClientDataSet campo := ClientDataSet1.FindField('autor'); // este campo existe no dataset? if campo <> nil then ShowMessage('O campo existe e seu valor no registro atual é: ' + campo.AsString) else // o campo não existe no dataset ShowMessage('O campo não existe no dataset'); end; Se o campo existir no dataset, veremos uma mensagem parecida com: "O campo existe e seu valor no registro atual é: M. D. Deitel". Em geral usamos o método FindField para determinar se um determinado componente field existe no dataset. O argumento para o método é o nome do campo que queremos pesquisar. Este nome pode ser o nome de um campo simples, o nome de um sub-campo de um objeto field que tenha sido qualificado pelo nome do campo pai ou o nome de um campo agregado. O comportamento do método FindField é o mesmo do método FieldByName. A diferença é que FindField retorna o valor nil se o campo não existir, enquanto FieldByName lança uma exceção do tipo EDatabaseError com a mensagem "Field not found". Esta dica foi escrita e testada no Delphi 2009. |
Delphi ::: Dicas & Truques ::: Rotinas de Conversão |
Como converter uma string em um valor numérico de ponto-flutuante (com parte fracionária) em Delphi usando as funções StrToFloat(), TryStrToFloat() e StrToFloatDef()Quantidade de visualizações: 25096 vezes |
Em algumas situações precisamos converter strings em valores numéricos do tipo ponto-flutuante, ou seja, números que contenham uma parte fracionária. Isso acontece quando recebemos valores de caixas de texto e precisamos usuá-los em cálculos. Vamos começar com a função StrToFloat() da unit SysUtils. Esta função recebe uma string representando um valor de ponto-flutuante válido e retorna um valor de ponto-flutuante. Veja o exemplo: procedure TForm1.Button1Click(Sender: TObject); var valor1, valor2, soma: Double; begin // vamos receber as strings dos TEdits e converter // seus valores para números de ponto-flutuante // note que em Delphi, um valor de ponto-flutuante // é informado em caixas de texto usando vírgula. Ex: 7,3 valor1 := StrToFloat(Edit1.Text); valor2 := StrToFloat(Edit2.Text); // vamos obter a soma dos dois valores soma := valor1 + valor2; // vamos exibir o resultado. Note o uso de FloatToStr() para // converter o valor fracionário em string ShowMessage('A soma é: ' + FloatToStr(soma)); end; Note que, se a string sendo convertida possuir um valor de ponto-flutuante inválido, uma exceção do tipo EConvertError será lançada. Podemos evitar isso usando a função TryStrToFloat(). Esta função recebe dois argumentos: a string a ser convertida e a variável do tipo Extended, Double ou Single que receberá o valor. O resultado será true se a conversão for feita com sucesso e false em caso contrário. Veja: procedure TForm1.Button1Click(Sender: TObject); var valor: Double; begin // vamos tentar converter o valor da caixa de texto // em um valor de ponto-flutuante if TryStrToFloat(Edit1.Text, valor) then ShowMessage('Conversão efetuada com sucesso.') else ShowMessage('Erro na conversão'); end; Há ainda uma terceira possibilidade: usar a função StrToFloatDef(). Esta função funciona exatamente da mesma forma que StrToFloat(), exceto que agora, se houver um erro de conversão, um valor de ponto-flutuante padrão será retornado. Veja: procedure TForm1.Button1Click(Sender: TObject); var valor: Double; begin // vamos converter o valor da caixa de texto // em um valor de ponto-flutuante. Se a conversão não puder // ser feita o valor 10,50 será atribuído à varial valor valor := StrToFloatDef(Edit1.Text, 10.50); // vamos exibir o resultado ShowMessage(FloatToStr(valor)); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
VB.NET ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercícios Resolvidos de VB.NET - Uma função recursiva que conta quantas vezes um valor inteiro k ocorre em um vetor de inteirosQuantidade de visualizações: 512 vezes |
Pergunta/Tarefa: Escreva uma função recursiva em VB.NET que conta quantas vezes um valor inteiro k ocorre em um vetor de 10 inteiros. Sua função deverá ter a seguinte assinatura: // função recursiva que recebe um valor e um vetor e retorna quantas // vezes o valor é encontrado no vetor public static int QuantRepeticoes(int indice, int valor, int[] vetor) { // sua implementação aqui } Informe o 1 valor: 2 Informe o 2 valor: 7 Informe o 3 valor: 4 Informe o 4 valor: 7 Informe o 5 valor: 1 Informe o valor a ser pesquisado no vetor: 7 O valor informado se repete 2 vezes. Veja a resolução comentada deste exercício usando VB.NET: Imports System Module Program ' função principal do programa VB.NET Sub Main(args As String()) ' vamos declarar um vetor de 10 inteiros Dim valores(4) As Integer ' vamos pedir ao usuário que informe os valores do vetor For i As Integer = 0 To valores.Length - 1 Console.Write("Informe o " & (i + 1) & " valor: ") ' efetua a leitura do valor informado para a posição atual do vetor valores(i) = Int32.Parse(Console.ReadLine()) Next ' agora vamos pedir para informar o valor a ser pesquisado Console.Write(vbCrLf & "Informe o valor a ser pesquisado no vetor: ") Dim valor As Integer = Int32.Parse(Console.ReadLine()) ' e vamos ver a quantidade de repetições Dim repeticoes As Integer = QuantRepeticoes(0, valor, valores) Console.WriteLine("O valor informado se repete " & repeticoes & " vezes.") Console.WriteLine(vbCrLf & vbCrLf & "Pressione qualquer tecla para sair...") ' pausa o programa Console.ReadKey() End Sub ' função recursiva que recebe um valor e um vetor e retorna quantas ' vezes o valor é encontrado no vetor Function QuantRepeticoes(indice As Integer, valor As Integer, vetor() As Integer) As Integer If indice = vetor.Length - 1 Then ' caso base...hora de parar a recursividade If vetor(indice) = valor Then Return 1 ' mais um repetição foi encontrada End If Else ' dispara mais uma chamada recursiva If vetor(indice) = valor Then ' houve mais uma repetição Return 1 + QuantRepeticoes(indice + 1, valor, vetor) Else Return 0 + QuantRepeticoes(indice + 1, valor, vetor) ' não repetiu End If End If Return 0 ' só para deixar o compilador satisfeito...esta linha nunca é ' executada End Function End Module |
C# ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Como usar if e if..else em C# - A estrutura condicional if do C#Quantidade de visualizações: 21946 vezes |
A instrução condicional if (se) é usada quando queremos testar uma condição e, baseado nesta, executar alguma ação. Veja:static void Main(string[] args){ int valor = 20; // testa se o valor é maior que 10 if(valor > 10){ Console.WriteLine("O valor é maior que 10"); } Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } Execute o código e veja que o texto "O valor é maior que 10" é exibido somente se o valor da variável valor for maior que 10. Note que neste teste temos somente uma instrução. Neste caso as chaves { e } podem ser omitidas: if(valor > 10) Console.WriteLine("O valor é maior que 10"); No entanto, quando duas ou mais instrução forem executadas, as chaves { e } são obrigatórias. Note também que o resultado do teste de uma instrução condicional if deve ser sempre true ou false. A instrução if..else (se..ou então) é útil quando queremos executar uma ação se uma condição for satisfeita e outra ação caso contrário. Veja: static void Main(string[] args){ int valor = 5; // testa se o valor é maior que 10 if(valor > 10){ Console.WriteLine("O valor é maior que 10"); } else{ Console.WriteLine("O valor é menor ou igual a 10"); } Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } Há ainda os casos em que temos que testar várias condições. Observe: static void Main(string[] args){ int valor = 8; // testa se o valor é maior que 10 if(valor > 10){ Console.WriteLine("O valor é maior que 10"); } // testa se o valor é menor que 10 else if(valor < 10){ Console.WriteLine("O valor é menor que 10"); } // o valor é igual a 10 else{ Console.WriteLine("O valor é igual a 10"); } Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } |
C ::: Dicas & Truques ::: Matemática e Estatística |
Como usar a função modf() da linguagem C para separar um valor de ponto flutuante em suas partes inteira e fracionáriaQuantidade de visualizações: 7893 vezes |
Em algumas situações precisamos obter as partes inteira e fracionária de um valor de ponto flutuante. Para isso podemos usar a função modf(). Veja sua assinatura:double modf(double x, double * intpart); O parâmetro x é o valor de ponto flutuante cujas partes queremos separar e intpart é uma variável do tipo double que receberá a parte inteira do valor. O retorno da função é o valor fracionário. Vamos ver um exemplo? Veja como podemos quebrar o valor 34,27 em suas partes inteira e fracionária: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { double valor = 34.27; // vamos separar o valor em suas partes inteira e fracionária double inteira = 0.0, fracionaria = 0.0; fracionaria = modf(valor, &inteira); // vamos exibir o resultado printf("Parte inteira: %f\n", inteira); printf("Parte fracionaria: %f\n", fracionaria); printf("\n\n"); system("pause"); return 0; } Ao executarmos este código teremos o seguinte resultado: Parte inteira: 34.000000 Parte fracionária: 0.270000 |
Java ::: Dicas & Truques ::: Programação Orientada a Objetos |
Programação orientada a objetos em Java - Java OOP - Como usar variáveis estáticas em suas classes JavaQuantidade de visualizações: 11989 vezes |
Variáveis estáticas podem ser definidas em Java por meio do uso da palavra-chave static. Uma variável estática pertence à classe na qual ela é definida e não à cada uma de suas instâncias. Pareceu confuso? Você pode pensar assim: quando definida com o modificador static, uma variável será única na classe, não importa a quantidade de instâncias da classe que serão criadas. Cada uma destas instâncias compartilhará o valor da variável estática. Além disso, uma variável estática pode ser acessada por meio do nome da classe, sem a necessidade de uma referência a uma de suas instâncias. Uma variável estática pode ser public, private ou protected. Vamos ver um exemplo? Considere a situação na qual gostaríamos de criar um identificador único para cada um dos objetos de uma classe. Veja o código para a classe Livro: Código para Livro.java: package estudos; public class Livro { // variáveis privadas private String titulo; // título do livro // variável estática que permitirá definir um // identificador único para cada livro private static int id; // construtor da classe Livro public Livro(){ // vamos incrementar a variável estática Livro.id++; } // método que permite obter o id do livro public int getId(){ return Livro.id; } // método que permite definir o título do livro public void setTitulo(String titulo){ this.titulo = titulo; } // método que permite obter o título do livro public String getTitulo(){ return this.titulo; } } Veja agora como criar três objetos da classe Livro a partir do método main() da aplicação: Código para Main.java: package estudos; public class Main { public static void main(String[] args) { // vamos criar um objeto da classe Livro Livro a = new Livro(); a.setTitulo("Programando em Java 2"); // vamos exibir os dados do livro System.out.println("Id: " + a.getId()); System.out.println("Titulo: " + a.getTitulo()); // vamos criar mais um livro Livro b = new Livro(); b.setTitulo("A biblia do C/C++"); // vamos exibir os dados do livro System.out.println("Id: " + b.getId()); System.out.println("Titulo: " + b.getTitulo()); // e mais um livro aqui Livro c = new Livro(); c.setTitulo("PHP + MySQL"); // vamos exibir os dados do livro System.out.println("Id: " + c.getId()); System.out.println("Titulo: " + c.getTitulo()); } } Ao executar esta aplicação teremos o seguinte resultado: Id: 1 Titulo: Programando em Java 2 Id: 2 Titulo: A biblia do C/C++ Id: 3 Titulo: PHP + MySQL Como podemos ver, a cada instância criada a variável id é incrementada em 1. Caso você não tenha entendido todo o processo, este incremento acontece no construtor da classe Livro. Veja: // vamos incrementar a variável estática Livro.id++; Nas situações em que as variáveis estáticas são públicas, podemos acessá-la usando o nome da classe seguida de um ponto. Assim, se a variável id fosse pública, poderíamos acessá-la de qualquer lugar de nossa aplicação da seguinte forma: System.out.println(Livro.id); |
C# ::: Windows Forms ::: TextBox |
C# Windows Forms - Como criar uma caixa de texto TextBox do tipo senha (password)Quantidade de visualizações: 14458 vezes |
Algumas vezes precisamos fazer com que um TextBox se comporte como uma caixa de texto do tipo senha. Para isso só precisamos manipular sua propriedade PasswordChar. Esta propriedade pode ser definida em tempo de design (usando a janela de propriedades Properties) ou em tempo de execução. Veja:private void button2_Click(object sender, EventArgs e){ // vamos definir o caractere a ser usado como máscara para a // digitação dos caracteres de senha textBox1.PasswordChar = '*'; } Em tempo de execução o valor da propriedade PasswordChar pode ser obtido da seguinte forma: private void button2_Click(object sender, EventArgs e){ // vamos definir o caractere a ser usado como máscara para a // digitação dos caracteres de senha textBox1.PasswordChar = '*'; // vamos obter o caractere usado como máscara para a digitação // dos caracteres de senha char letra = textBox1.PasswordChar; MessageBox.Show("O caractere usado para a propriedade PasswordChar é: " + letra); } É possível também forçar o TextBox a usar o caractere de senha usado pelo Windows. Para isso só precisamos fornecer o valor true para a propriedade UseSystemPasswordChar. Veja: private void button2_Click(object sender, EventArgs e){ // queremos que o caractere usado como máscara para a digitação // de senhas seja o mesmo do sistema textBox1.UseSystemPasswordChar = true; } |
R ::: Fundamentos da Linguagem ::: Variáveis e Constantes |
Quais são as palavras reservadas da linguagem RQuantidade de visualizações: 1590 vezes |
As palavras reservadas, ou palavras-chaves, de uma linguagem de programação são um conjunto de palavras e símbolos que possuem significado especial dentro da linguagem, em seu interpretador ou compilador. Estas palavras não podem ser usadas como identificadores de funções, nomes de variáveis, constantes, nomes de classes, etc. A linguagem R, no momento que escrevo este texto, possui as seguintes palavras reservadas: if else repeat while function for in next break TRUE FALSE NULL Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character_ ? A qualquer momento nós podemos listas estas palavras reservadas, seja na janela de comandos ou em um script do R. Basta disparmos os comandos abaixo: > ?reserved [ENTER] > help(reserved) [ENTER] > Entre essas palavras reservadas, if, else, repeat, while, function, for, in, next e break são usadas para os testes condicionais, laços e funções definidas pelo usuário. São estas palavras que formam a estrutura básica da linguagem R. As palavras TRUE e FALSE são as constantes lógicas em R. NULL representa a ausência de um valor, ou um valor indefinido (ainda não houve atribuição). A palavra reservada Inf significa "Infinity". Por exemplo, quando 1 é dividido por 0, enquanto NaN quer dizer "Not a Number" (não é um número). Um exemplo disso é quando dividimos 0 por 0. NA significa "Not Available" e é usada para representar valores não informados. A linguagem R é sensível a maiúsculas e minúsculas. Isso quer dizer que TRUE e True não são a mesma coisa. Enquanto TRUE é uma palavra reservada representando uma constante lógica, True pode ser usada como um nome de variável. |
Nossas 20 dicas & truques de programação mais populares |
Delphi - Como selecionar um item de uma ListBox do Delphi em tempo de execução usando a propriedade ItemIndex AutoCAD VBA - Como criar uma linha no AutoCAD usando Autocad VBA e a função AddLine() do objeto ModelSpace |
Você também poderá gostar das dicas e truques de programação abaixo |
AutoLISP - Como retornar o nome da layer atual do AutoCAD usando AutoLISP e a variável de sistema CLAYER |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |