Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercícios e Algorítmos Resolvidos de Java - Somando os elementos da diagonal principal de uma matrizQuantidade de visualizações: 9540 vezes |
|
Pergunta/Tarefa: Em álgebra linear, a diagonal principal de uma matriz A é a coleção das entradas Aij em que i é igual a j. A diagonal principal de uma matriz quadrada une o seu canto superior esquerdo ao canto inferior direito (conforme mostrado na saída do problema proposto abaixo). Escreva um programa (algorítmo) Java que declara uma matriz 3x3 e pede ao usuário para informar seus valores. Em seguida mostre todos os valores da matriz e a soma dos elementos da diagonal principal. Sua saída deverá ser parecida com a imagem abaixo:
Valor para a linha 0 e coluna 0: 1
Valor para a linha 0 e coluna 1: 4
Valor para a linha 0 e coluna 2: 7
Valor para a linha 1 e coluna 0: 12
Valor para a linha 1 e coluna 1: 9
Valor para a linha 1 e coluna 2: 8
Valor para a linha 2 e coluna 0: 5
Valor para a linha 2 e coluna 1: 10
Valor para a linha 2 e coluna 2: 14
Valores na matriz
1 4 7
12 9 8
5 10 14
A soma dos elementos da diagonal principal é: 24
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);
// vamos declarar e construir uma matriz de três linhas
// e três colunas
int matriz[][] = new int[3][3];
int soma_diagonal = 0; // guarda a soma dos elementos
// na diagonal principal
// vamos ler os valores para os elementos da matriz
for(int i = 0; i < matriz.length; i++){ // linhas
for(int j = 0; j < matriz[0].length; j++){ // colunas
System.out.print("Informe o valor para a linha " + i
+ " e coluna " + j + ": ");
matriz[i][j] = Integer.parseInt(entrada.nextLine());
}
}
// vamos mostrar a matriz da forma que ela foi informada
System.out.println();
// percorre as linhas
for(int i = 0; i < matriz.length; i++){
// percorre as colunas
for(int j = 0; j < matriz[0].length; j++){
System.out.printf("%5d ", matriz[i][j]);
}
// passa para a próxima linha da matriz
System.out.println();
}
// vamos calcular a soma dos elementos da diagonal principal
for(int i = 0; i < matriz.length; i++){
for(int j = 0; j < matriz[0].length; j++){
if(i == j){
soma_diagonal = soma_diagonal + matriz[i][j];
}
}
}
// finalmente mostramos a soma da diagonal principal
System.out.println("\nA soma dos elementos da diagonal principal é: "
+ soma_diagonal);
}
}
|
C++ ::: Dicas & Truques ::: MIDI Musical Instrument Digital Interface, Mapeamento e sequenciamento MIDI, Entrada e saída MIDI |
Programação MIDI usando C++ - Como usar um vetor de chars para construir uma mensagem MIDI e passá-lo para a função midiOutShortMsg() da API do WindowsQuantidade de visualizações: 2698 vezes |
|
Nas dicas dessa seção nós vimos como é possível enviar uma mensagem MIDI para o dispositivo de saída por meio da função midiOutShortMsg() da API do Windows. Essa função recebe um handle para o dispositivo de saída MIDI e um valor DWORD contendo a mensagem MIDI. Se você revisitar essas dicas, verá que na maioria delas nós informamos a mensagem MIDI diretamente no parâmetro da função (como um valor hexadecimal). Nesta dica mostrarei como é possível construir as mensagens MIDI usando seus valores individuais e, o que é melhor, usando valores decimais. Para isso nós vamos construir um vetor de char e informar os valores que compõem a mensagem. É importante observar que a função midiOutShortMsg() exige que a mensagem MIDI seja informada na ordem de bytes "little endian" ou seja, o status MIDI é informado no byte de ordem mais baixa. Isso é conseguido com um cast do vetor para um unsigned long. Veja o trecho de código: // vamos criar um vetor contendo os valores que compõem a mensagem MIDI unsigned char vetor[4]; vetor[0] = 144; // Note-on no Canal 1 vetor[1] = 40; // Nota Mi na 4ª oitava vetor[2] = 100; // Velocidade/volume da nota vetor[3] = 0; // Não é usado // e aqui é que acontece a mágica. Quando fazemos o cast do // vetor para o tipo long sem sinal, os valores são colocados em // little endian, justamente a ordem de bytes esperada pela // função midiOutShortMsg() unsigned long mensagem = *(unsigned long*)vetor; // envia a mensagem MIDI midiOutShortMsg(saida, mensagem); Note que não coloquei o código todo. Para completá-lo, veja outras dicas dessa seção. |
Python ::: Desafios e Lista de Exercícios Resolvidos ::: Programação Orientada a Objetos |
Exercício Resolvido de Python - Uma classe para representar uma pessoa, com os atributos privados de nome, data de nascimento e alturaQuantidade de visualizações: 10060 vezes |
|
Pergunta/Tarefa: Crie uma classe para representar uma pessoa, com os atributos privados de nome, data de nascimento e altura. Crie os métodos públicos necessários para sets e gets e também um método para imprimir todos dados de uma pessoa. Crie um método para calcular a idade da pessoa. A data de nascimento pode ser informada como uma String (no formato 05/10/1982, por exemplo) e, no cálculo da idade, considere apenas o ano da data de nascimento informada. Sua saída deverá ser parecida com: ![]() Resposta/Solução: Veja a resolução comentada deste exercício usando Python console: Código para a classe Pessoa (pessoa.py):
from datetime import datetime
class Pessoa:
# construtor da classe Pessoa
def __init__(self, nome, data_nascimento, altura):
self._nome = nome
self._data_nascimento = data_nascimento
self._altura = altura
# método que imprime todos os dados da pessoa
def imprimir_dados(self):
print("Nome:", self._nome, "\nData de Nascimento:" ,
self._data_nascimento, "\nAltura:", self._altura)
# método que calcula a idade da pessoa
def calcular_idade(self):
# vamos obter o ano da data de hoje
ano_data_atual = datetime.today().year
# agora vamos obter o ano de nascimento da pessoa
partes_data_nascimento = self._data_nascimento.split("/")
ano_nascimento = partes_data_nascimento[2]
# agora mostramos a idade da pessoa
anos = ano_data_atual - int(ano_nascimento)
print("A pessoa tem", anos, "anos.")
# método que define o nome da pessoa
def set_nome(self, nome):
self._nome = nome
# método que obtém o nome da pessoa
def get_nome(self):
return self._nome
# método que define a data de nascimento da pessoa
def set_data_nascimento(self, data_nascimento):
self._data_nascimento = data_nascimento
# método que obtém a data de nascimento da pessoa
def get_data_nascimento(self):
return self._data_nascimento
# método que define a altura da pessoa
def set_altura(self, altura):
self._data_altura = altura
# método que obtém a altura da pessoa
def get_altura(self):
return self._altura
Código para o arquivo principal.py:
# importa a classe Pessoa
from pessoa import Pessoa
def main():
# cria um novo objeto da classe Pessoa
pessoa = Pessoa("Amanda Rodrigues", "12/03/1972", 1.65)
# exibe os dados da pessoa
pessoa.imprimir_dados()
# mostra a idade da pessoa
pessoa.calcular_idade()
if __name__== "__main__":
main()
|
C# ::: Coleções (Collections) ::: List<T> |
Como usar a classe genérica List<T> do C# em suas aplicaçõesQuantidade de visualizações: 15970 vezes |
A classe genérica List<T> da linguagem C# representa uma lista fortemente tipada de objetos que podem ser acessados por índices. Esta classe fornece métodos para pesquisar, ordenar e manipular seus elementos. Veja sua posição na hierarquia de classes da plataforma .NET:
System.Object
System.Collections.Generic.List<T>
System.ServiceModel.Install.Configuration.
ServiceModelConfigurationSectionCollection
System.ServiceModel.Install.Configuration.
ServiceModelConfigurationSectionGroupCollection
System.Workflow.ComponentModel.ActivityCollection
System.Workflow.Activities.WorkflowRoleCollection
System.Workflow.Activities.OperationParameterInfoCollection
System.Workflow.ComponentModel.Design.
ActivityDesignerGlyphCollection
System.Workflow.Runtime.Tracking.ExtractCollection
System.Workflow.Runtime.Tracking.TrackingAnnotationCollection
System.Workflow.Runtime.Tracking.TrackingConditionCollection
System.Workflow.Runtime.Tracking.ActivityTrackingLocationCollection
System.Workflow.Runtime.Tracking.UserTrackingLocationCollection
System.Workflow.Runtime.Tracking.ActivityTrackPointCollection
System.Workflow.Runtime.Tracking.UserTrackPointCollection
System.Workflow.Runtime.Tracking.WorkflowTrackPointCollection
Esta classe implementa também as interfaces IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection e IEnumerable. A classe List<T> é a equivalente genérica da classe ArrayList. Ela implementa a interface genérica IList<T> usando um array (matriz) cujo tamanho é dinamicamente aumentado de acordo com a necessidade. Esta classe usa tanto um comparador de igualdade quanto um de ordenação. Os métodos tais como Contains(), IndexOf(), LastIndexOf() e Remove() usam um comparador de igualdade para os elementos da lista. O comparador de igualdade padrão para o tipo T é definido segundo as seguintes regras: Se o tipo T implementar a interface genérica IEquatable<T>, então o comparador de igualdade é o método Equals(T) dessa interface. Caso contrário, o comparador de igualdade padrão é Object.Equals(Object). Os métodos tais como BinarySearch() e Sort() usam um comparador de ordenação para os elementos da lista. O comparador padrão para o tipo T é definido da seguinte forma: Se o tipo T implementar a interface genérica IComparable<T>, então o comparador padrão é o método CompareTo(T) dessa interface. Caso contrário, se o tipo T implementar a interface não-genérica IComparable, então o comparador padrão é o método CompareTo(Object) dessa interface. Se o tipo T não implementar nenhuma destas duas interfaces, então não haverá comparador padrão, e um comparador ou delegate de comparação deve ser fornecido explicitamente. Uma lista List<T> não fornece garantias quanto à sua ordenação. Devemos ordená-la por conta própria antes de efetuar algumas operações (tais como BinarySearch) que exigem que a List<T> esteja ordenada. Os elementos em uma coleção do tipo List<T> podem ser acessados usando índices (que começam a partir de 0). Uma List<T> aceita o valor null como valor válido para tipos referência e aceita elementos duplicados. Em relação à performance, a documentação do .NET afirma que, embora List<T> e ArrayList possuam funcionalidade semelhante, a classe List<T> possui uma performance melhor na maioria dos casos, além de ser type safe (oferece segurança de tipos). Veja um trecho de código no qual criamos uma List<T> de inteiros, inserimos alguns valores e usamos o laço foreach para percorrer a lista e exibir os valores dos elementos:
static void Main(string[] args){
// vamos criar um objeto da classe List<T>
List<int> valores = new List<int>();
// vamos inserir três valores na lista
valores.Add(5);
valores.Add(2);
valores.Add(9);
// vamos usar o laço foreach para percorrer os elementos
// na lista
foreach(int v in valores){
Console.WriteLine(v);
}
// vamos pausar a execução
Console.ReadKey();
}
|
Nossas 20 dicas & truques de programação mais populares |
|
JavaScript - Como retornar o tamanho de uma string em JavaScript usando a propriedade length do objeto String JavaScript - JavaScript para iniciantes - Como obter o valor do maior número possível em JavaScript usando Number.MAX_VALUE |
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 |







