C ::: Desafios e Lista de Exercícios Resolvidos ::: Struct (Estruturas, Registros)

Exercício Resolvido de C - Programa de cálculo de médias de alunos. Escrever um programa C que cadastre o nome, a matrícula e duas notas de vários alunos

Quantidade de visualizações: 3052 vezes
Pergunta/Tarefa:

Programa de cálculo de médias de alunos. Escrever um programa C que cadastre o nome, a matrícula e duas notas de vários alunos. Em seguida imprima a matrícula, o nome e a média de cada um deles.

Seu código deverá, obrigatoriamente, usar a estrutura abaixo para a representação de cada aluno:

// estrutura Aluno
typedef struct{
  int matricula;
  char nome[100];
  float nota1;
  float nota2;
} Aluno;
Sua saída deverá ser parecida com:

LEITURA DOS ALUNOS:

Matrícula do Aluno 1: 123
Nome do Aluno 1: OSMAR J SILVA
Nota 1 do Aluno 1: 8,5
Nota 2 do Aluno 1: 9,3
Matrícula do Aluno 2: 432
Nome do Aluno 2: FABIANA CASTRO
Nota 1 do Aluno 2: 9
Nota 2 do Aluno 2: 8,2

DADOS DOS ALUNOS:

DADOS DO ALUNO 1: 
Matrícula: 123
Nome: OSMAR J SILVA
Nota 1: 8,50
Nota 2: 9,30
Média: 8,90

DADOS DO ALUNO 2:
Matrícula: 432
Nome: FABIANA CASTRO
Nota 1: 9,00
Nota 2: 8,20
Média: 8,60
Resposta/Solução:

Veja a resolução comentada deste exercício usando C:

Código para alunos.c:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

// estrutura Aluno
typedef struct{
  int matricula;
  char nome[100];
  float nota1;
  float nota2;
} Aluno;

// define a quantidade de alunos que serão lidos
#define QUANT_ALUNOS 2

int main(int argc, char *argv[]) {
  int i; // controle do laço
  Aluno alunos[QUANT_ALUNOS]; // vetor de alunos
	
  setlocale(LC_ALL,""); // para acentos do português
	
  printf("LEITURA DOS ALUNOS:\n\n");
	
  for(i = 0; i < QUANT_ALUNOS; i++){
    // vamos ler a matrícula do aluno
    printf("Matrícula do Aluno %d: ", (i + 1));
    scanf("%d", &alunos[i].matricula);
    fflush(stdin); // para o scanf não sair pulando o gets
    // agora o nome do aluno
    printf("Nome do Aluno %d: ", (i + 1));
    gets(alunos[i].nome);
    // vamos ler a primeira nota
    printf("Nota 1 do Aluno %d: ", (i + 1));
    scanf("%f", &alunos[i].nota1);
    // vamos ler a segunda nota
    printf("Nota 2 do Aluno %d: ", (i + 1));
    scanf("%f", &alunos[i].nota2);
  }

  // agora vamos mostrar os alunos lidos, com suas notas
  // e suas médias aritméticas
  printf("\nDADOS DOS ALUNOS:\n");
	
  for(i = 0; i < QUANT_ALUNOS; i++){
    printf("\nDADOS DO ALUNO %d:\n ", (i + 1));
    printf("Matrícula: %d\n", alunos[i].matricula);
    printf("Nome: %s\n", alunos[i].nome);
    printf("Nota 1: %.2f\n", alunos[i].nota1);
    printf("Nota 2: %0.2f\n", alunos[i].nota2);
    printf("Média: %.2f\n", (alunos[i].nota1 + alunos[i].nota2) / 2);
  }
	
  printf("\n\n");
  system("pause");
  return 0;
}



Java ::: Dicas & Truques ::: Threads

Java Threads - Como interromper a execução de uma thread em suas aplicações Java

Quantidade de visualizações: 15505 vezes
A classe Thread fornece um método chamado interrupt() que serve para interrompermos a execução de uma determinada thread. Os métodos sleep() e yield() transferem a thread sendo executada no momento do estado "executando" para o estado "pronta". O método interrupt(), por sua vez, faz com que uma thread vá para o estado "finalizada", ou seja, ela não voltará mais a ser executada.

O problema é que, nem sempre, o método interrupt() parece surtir o efeito desejado, ou seja, fazer com que a thread pare de executar imediatamente. Por esta razão, a forma mais fácil de "matar" uma thread é forçar a saída de seu método run(). Veja um exemplo:

// criamos uma classe que servirá como thread
class MinhaThread extends Thread{
  private String nome;  

  public MinhaThread(String nome){
    this.nome = nome;
  }   

  public void run(){
    for(int i = 1; i <= 20; i++){
      System.out.println(nome + ": " + i);

      if((i >= 3) && (nome.equals("Thread 1"))){
        try{
          System.out.println(nome + " foi eliminada");
          return; // interrompe a execução do método run()
        }
        catch(SecurityException e){
          System.out.println(e.getMessage());
        }      
      }
    }
  }
}

public class Estudos{
  public static void main(String[] args){
    // vamos criar duas threads
    MinhaThread t1 = new MinhaThread("Thread 1");
    t1.start();    

    MinhaThread t2 = new MinhaThread("Thread 2");
    t2.start();
  }
}

Ao usar a instrução return nós forçamos a saída do método run() e consequentemente, o fim da tarefa sendo realizada pela thread.


Java ::: Coleções (Collections) ::: LinkedHashSet

Como remover itens repetidos de uma ArrayList usando um objeto da classe LinkedHashSet do Java

Quantidade de visualizações: 702 vezes
Em algumas situações nós temos uma ArrayList com algumas repetições e gostaríamos de remover os itens duplicados mas gostaríamos de manter a ordem original dos elementos. Para isso nós podemos usar um objeto da classe LinkedHashSet.

Como sabemos, classes que implementam a interface Set possuem a habilidade de recusar itens repetidos. A classe LinkedHashSet, além de recusar duplicidades de valores, mantém a ordem de inserção dos elementos.

Veja o código Java completo para o exemplo:

package estudos;

import java.util.ArrayList;
import java.util.LinkedHashSet;

public class Estudos {
  public static void main(String[] args) {
    // vamos criar uma ArrayList de linguagens de programação
    ArrayList<String> lista = new ArrayList<>();
    
    // vamos adicionar alguns elementos no ArrayList. Note
    // que temos itens repetidos
    lista.add("Java");
    lista.add("Scala");
    lista.add("Ruby");
    lista.add("Scala");
    lista.add("Python");
    lista.add("Ruby");
    lista.add("Delphi");
 
    // vamos mostrar o conteúdo do ArrayList
    System.out.println("O conteúdo do ArrayList é: " +
      lista.toString());
    
    // vamos criar uma instância da classe LinkedHashSet
    LinkedHashSet<String> set = new LinkedHashSet<>(lista);
 
    // agora construímos uma nova ArrayList sem repetições a
    // partir do LinkedHashSet
    ArrayList<String> lista2 = new ArrayList<>(set);
 
    // e mostramos o resultado
    System.out.println("ArrayList sem repetições: " +
      lista2.toString());
  }
}

Ao executar este código Java nós teremos o seguinte resultado:

O conteúdo do ArrayList é: [Java, Scala, Ruby, Scala, Python, Ruby, Delphi]
ArrayList sem repetições: [Java, Scala, Ruby, Python, Delphi]

Note como a ordem dos elementos no ArrayList original foi respeitada.


JavaScript ::: Dicas & Truques ::: Mouse e Teclado

Como bloquear o botão direito do mouse em suas páginas HTML usando JavaScript

Quantidade de visualizações: 90 vezes
Em algumas situações, principalmente games desenvolvidos em JavaScript ou HTML5, nós gostaríamos de evitar o botão direito do mouse, ou seja, o menu de contexto no corpo da página web.

Para isso só precisamos retornar false para o evento oncontextmenu. Veja como isso pode ser feito no trecho de código JavaScript abaixo:

<html>
<head>
  <title>Estudos JavaScript</title>
</head>
 
<body oncontextmenu="return false">

<h1>Você não pode usar o botão direito nessa página</h1>

</body>
</html>

Uma boa idéia é avisar ao usuário (por meio de uma mensagem window.alert) que ele não pode usar o botão de contexto no documento HTML. Veja:

<html>
<head>
  <title>Estudos JavaScript</title>
</head>
 
<body oncontextmenu="return aviso()">

<script type="text/javascript">
  function aviso(){
    window.alert("Botão direito não permitido.");
    return false;
  }
</script>

</body>
</html>

Agora, ao clicarmos com o botão direito do mouse na página, uma mensagem window.alert será exibida com o seguinte texto:

Botão direito não permitido.


JavaScript ::: Dicas & Truques ::: Validação de Formulários

Validação de formulários em JavaScript - Como validar um formulário contendo usuário e senha em JavaScript

Quantidade de visualizações: 34313 vezes
A validação de formulários em JavaScript é uma das primeiras técnicas que devemos aprender, pois ela avita a perda de tempo que ocorre com a validação somente do lado do servidor (não se esqueça: as duas são necessárias).

Ao validar no navegador, o usuário já vai as devidas correções sem ter que esperar o processamento de seus dados para, só então, ser comunicado de que alguma informação está incorreta.

Assim, nesta dica, mostrarei como podemos validar um nome de usuário e senha em JavaScript. Deixei o exemplo bem mais, mas você pode melhorá-lo, adicionando até expressões regulares para ampliar as situações que podem ocorrer.

O código abaixo vai gerar o seguinte formulário HTML:



E agora o código completo para o exemplo:

<html>
<head>
<title>Estudando JavaScript</title>

<style type="text/css">
  input {margin-bottom: 3px; margin-top: 3px}
</style>

<script language="JavaScript">
  function validar(){
    // só permitirá o envio se os dados forem fornecidos
    if(document.login.nome.value == ""){
      alert("Forneça o nome do usuário");
      document.login.nome.focus();
      return false;
    }
    else if(document.login.senha.value == ""){
      alert("Forneça a senha do usuário");
      document.login.senha.focus();
      return false;
    }
    else{
      return true;
    }
  }
</script>

</head>
<body>

<form name="login" action="gravar.php" method="post" 
     onsubmit="return validar()">
  Usuário:<br>
  <input type="text" id="nome" name="nome"><br>
  Senha:<br>
  <input type="password" id="senha" name="senha"><br>
  <input type="submit" value="Entrar!">
</form>
 
</body>
</html>



Delphi ::: Dicas & Truques ::: Strings e Caracteres

Como converter todo o conteúdo de uma string para letras maiúsculas em Delphi usando a função AnsiUpperCase()

Quantidade de visualizações: 17273 vezes
Algumas vezes precisamos converter todo o conteúdo de uma string para letras maiúsculas. Em Delphi isso pode ser feito com o auxílio da função AnsiUpperCase(). Esta função recebe uma string e retorna outra string com todos os caracteres maiúsculos. Veja o exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
  nome: string;
begin
  nome := 'Osmar';

  // vamos converter a string para letras maiúsculas
  nome := AnsiUpperCase(nome);

  // exibe o resultado
  ShowMessage(nome);
end;

Note que esta função suporta caracteres de mais de um byte e com acentuações.

Para questões de compatibilidade, esta dica foi escrita usando Delphi 2009.


C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle

Exercício Resolvido de C++ - Como testar se um ano é bissexto em C++ - Um programa que lê um ano com quatro dígitos e informa se ele é bissexto ou não

Quantidade de visualizações: 483 vezes
Pergunta/Tarefa:

Chama-se ano bissexto o ano ao qual é acrescentado um dia extra, ficando ele com 366 dias, um dia a mais do que os anos normais de 365 dias, ocorrendo a cada quatro anos (exceto anos múltiplos de 100 que não são múltiplos de 400). Isto é feito com o objetivo de manter o calendário anual ajustado com a translação da Terra e com os eventos sazonais relacionados às estações do ano. O último ano bissexto foi 2012 e o próximo será 2016.

Um ano é bissexto se ele for divisível por 4 mas não por 100, ou se for divisível por 400.

Escreva um programa C++ que pede ao usuário um ano com quatro dígitos e informa se ele é bissexto ou não.

Sua saída deverá ser parecida com:

Informe o ano: 2024
O ano informado é bissexto.
Resposta/Solução:

Veja a resolução comentada deste exercício usando C++:

#include <iostream>

using namespace std;

// função principal do programa
int main(int argc, char *argv[]){
  // variáveis usadas para resolver o problema
  int ano;
  
  // vamos solicitar que o usuário informe um ano
  cout << "Informe o ano: ";
  cin >> ano;
	
  // vamos verificar se o ano informado é bissexto
  if(((ano % 4 == 0) && (ano % 100 != 0)) || (ano % 400 == 0)){
    cout << "O ano informado é bissexto.";  
  }
  else{
    cout << "O ano informado não é bissexto.";  
  }
  
  cout << "\n" << endl;
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}



C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Operadores de Manipulação de Bits (Bitwise Operators)

Exercícios Resolvidos de C++ - Como converter de decimal para binário usando os operadores de bits em C++

Quantidade de visualizações: 793 vezes
Aprenda a programar com a nossa lista de exercícios de C++ e desafios de programação.

Pergunta/Tarefa:

Escreva um programa C++ para pede para o usuário informar um número decimal e faça a conversão para binário usando os operadores de bits.

Sua saída deverá ser parecida com:

Informe um número decimal: 9
O número binário é: 00000000000000000000000000001001
Resposta/Solução:

Veja a resolução completa para o exercício em C++, comentada linha a linha:

#include <string>
#include <iostream>

using namespace std;

// vamos definir o tamanho do vetor para guardar
// os dígitos do número binário
#define TAM_INT sizeof(int) * 8

int main(int argc, char *argv[]){
  // variáveis para ajudar a resolver o problema
  int decimal, indice, i;
  
  // vetor para guardar o número binário
  int binario[TAM_INT];

  // vamos pedir para o usuário informar um decimal inteiro
  cout << "Informe um número decimal: ";
  cin >> decimal;

  // ajustamos índice para o último elemento do vetor
  indice = TAM_INT - 1;

  // enquanto índice for maior ou igual a 0
  while(indice >= 0){
    // vamos guardar o bit menos significativo LSB
    binario[indice] = decimal & 1;
    
    // diminuímos o índice
    indice--;

    // desloca bits para a direita uma posição
    decimal = decimal >> 1;
  }

  // agora vamos exibir o número binário
  cout << "O número binário é: ";
  for(i = 0; i < TAM_INT; i++){
    cout << binario[i];
  }
 
  cout << "\n\n"; 
 
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS; 
}



Python ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas

Como converter graus em radianos em Python - Trigonometria em Python

Quantidade de visualizações: 3137 vezes
Quando estamos trabalhando com trigonometria na linguagem Python, é importante ficarmos atentos ao fato de que todos os métodos e funções trigonométricas em Python recebem seus argumentos em radianos, em vez de graus.

Nesta dica veremos como converter graus em radianos (sem a chatice de ficar relembrando regra de três). Veja a fórmula abaixo:

\[Radianos = Graus \times \frac{\pi}{180}\]

Agora veja como esta fórmula pode ser escrita em código Python:

import math

# função principal do programa
def main():
  # valor em graus
  graus = 30
  # obtém o valor em radianos
  radianos = graus * (math.pi / 180)
  # mostra o resultado
  print(graus, "graus convertidos para",
    "radianos é", radianos)
 
if __name__== "__main__":
  main()

Ao executarmos este código Python nós teremos o seguinte resultado:

30 graus convertidos para radianos é 0.5235987755982988

Por fim, saiba que a linguagem Python nos oferece o método math.radians() que nos permite converter ângulos em graus para radianos. Meu propósito nesta dica foi mostrar a você como o cálculo de conversão pode ser escrito em Python. Em outras dicas dessa seção abordaremos o método math.radians().


C++ ::: Dicas & Truques ::: Ponteiros, Referências e Memória

Como alocar memória dinâmica usando o operador new do C++

Quantidade de visualizações: 12355 vezes
Em algumas situações precisamos alocar memória dinamicamente. Em C++ isso é feito com o auxílio do operador new. Este operador permite alocar uma determinada quantidade de bytes, alinhados de forma a representar o objeto para o qual queremos reservar memória.

Veja um exemplo de código no qual alocamos memória dinâmica para uma variável do tipo int:

#include <iostream>

using namespace std;

int main(int argc, char *argv[]){
  // aloca memória para um objeto do tipo int
  int *ponteiro = new int;

  // vamos definir o valor para o objeto recém-alocado
  *ponteiro = 20;

  // vamos exibir seu valor
  cout << *ponteiro << endl;

  // vamos liberar a memória
  delete ponteiro;

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Note que aqui a memória foi alocada e guardada em um ponteiro. Veja também o uso do operador delete para liberar a memória alocada. Isso evita os vazamentos de memória tão frequentes em aplicações que lidam com a memória dinâmica.

É claro que este não é o exemplo mais prático. Qual a vantagem de se alocar memória para um int? Declarar uma variável teria sido mais eficiente.

A alocação de memória dinâmica é mais útil quando estamos lidando com objetos mais complexos que os tipos básicos. Alguns exemplos envolvem a criação de objetos de classes, matrizes, estruturas de dados, etc.

Veja um exemplo no qual temos uma declaração de uma classe chamada Cliente e em seguida alocamos memória para uma instância desta classe:

#include <iostream>
#include <string>

using namespace std;

// declaração da classe Cliente
class Cliente{
  public:
    Cliente();
    string obterNome();
    void definirNome(string);
  private:
    string nome;
};

// implementação dos métodos da classe
Cliente::Cliente(){} // construtor vazio

// obtém o nome do cliente
string Cliente::obterNome(){
  return this->nome;
}

// define o nome do cliente
void Cliente::definirNome(string nome){
  this->nome = nome;
}

int main(int argc, char *argv[]){
  // aloca memória para um objeto da classe Cliente
  Cliente *c = new Cliente();

  // vamos definir o nome do cliente
  c->definirNome("Osmar J. Silva");

  // vamos exibir o nome do cliente
  cout << c->obterNome() << endl;

  // vamos liberar a memória usada
  delete c;

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Ao executar este código C++ nós teremos o seguinte resultado:

Nome do cliente: Osmar J. Silva

Carregar Publicações Anteriores


Nossas 20 dicas & truques de programação mais populares

Você também poderá gostar das dicas e truques de programação abaixo

Nossas 20 dicas & truques de programação mais recentes

Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site

Últimos Exercícios Resolvidos

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 70 usuários muito felizes estudando em nosso site.