Você está aqui: Cards de Hidrostática |
||
|
||
|
|
||
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 alunosQuantidade de visualizações: 3380 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;
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 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;
}
|
GoLang ::: Dicas & Truques ::: Strings e Caracteres |
Como retornar o tamanho de uma string em Golang usando os métodos len() e RuneCountInString()Quantidade de visualizações: 1201 vezes |
|
Em algumas situações nós precisamos obter e retornar o tamanho de uma string, ou seja, a quantidade de caracteres em uma palavra, frase ou texto. Para isso nós podemos duas funções na linguagem Go: len() e RuneCountInString(). O método len() retorna a quantidade de bytes contidos em uma string. Note, porém, que esta função não é recomendada quando estamos lidando com caracteres do conjunto utf8, que requerem dois bytes. Dessa forma, se estivermos certos de que a string não possui acentos ou caracteres especiais, então o método len() é o mais adequado. Veja um trecho de código Golang no qual pedimos para o usuário informar uma palavra ou frase e em seguida nós informamos a quantidade de caracteres contidos nela:
// pacote principal
package main
// vamos importar os módulos necessários
import (
"bufio"
"fmt"
"os"
"strings"
)
// esta é a função principal do programa
func main() {
// variáveis que vamos usar na resolução do problema
var frase string
var tamanho int
// vamos pedir para o usuário informar uma
// palavra ou frase
fmt.Print("Informe uma palavra ou frase: ")
var entrada = bufio.NewReader(os.Stdin)
frase, _ = entrada.ReadString('\n')
frase = strings.TrimSpace(frase)
// vamos obter o tamanho da string
tamanho = len(frase)
// e mostramos o resultado
fmt.Printf("A palavra ou frase contém %d caracteres",
tamanho)
}
Ao executarmos este código Go nós teremos o seguinte resultado: Informe uma palavra ou frase: Gosto de Python A palavra ou frase contém 15 caracteres Se contarmos a quantidade de caracteres na string informada, realmente veremos que o código retornou o resultado esperado. O problema acontece quando informamos uma palavra ou frase com acentos ou caracteres especiais. Experimente e veja que a função len() começa a retornar uma contagem estranha. Quando nossas strings possuem caracteres especiais ou com acentos, a função a ser usada é RuneCountInString(). Veja:
// pacote principal
package main
// vamos importar os módulos necessários
import (
"bufio"
"fmt"
"os"
"unicode/utf8"
"strings"
)
// esta é a função principal do programa
func main() {
// variáveis que vamos usar na resolução do problema
var frase string
var tamanho int
// vamos pedir para o usuário informar uma
// palavra ou frase
fmt.Print("Informe uma palavra ou frase: ")
var entrada = bufio.NewReader(os.Stdin)
frase, _ = entrada.ReadString('\n')
frase = strings.TrimSpace(frase)
// vamos obter o tamanho da string
tamanho = utf8.RuneCountInString(frase)
// e mostramos o resultado
fmt.Printf("A palavra ou frase contém %d caracteres",
tamanho)
}
Ao executarmos este novo código nós teremos o resultado: Informe uma palavra ou frase: Código A palavra ou frase contém 6 caracteres |
C# ::: Dicas & Truques ::: Rotinas de Conversão |
Como converter um tipo string para um tipo decimal em C# usando o método Parse() da classe DecimalQuantidade de visualizações: 12937 vezes |
|
Este exemplo mostra como converter uma string em um valor do tipo decimal. Para isso nós vamos usar o método Parse() da classe Decimal da linguagem C#. No entanto, é preciso termos cuidado, pois este método pode lançar três tipos de exceções: ArgumentNullException, FormatException e OverflowException. Veja o trecho de código a seguir:
using System;
namespace Estudos {
class Program {
static void Main(string[] args) {
string valor_string = "530,54";
// experimente com os valores "23,5", "arquivo" e
// "659"
// tenta efetuar a conversão de string para decimal
try {
decimal valor_decimal = decimal.Parse(valor_string);
// exibe o resultado
Console.WriteLine("Valor convertido com sucesso: " + valor_decimal);
}
catch (FormatException e) {
// exibe a informações sobre a exceção
// Input string was not in a correct format.
Console.WriteLine(e.Message);
}
Console.WriteLine("\n\nPressione qualquer tecla para sair...");
// pausa o programa
Console.ReadKey();
}
}
}
Ao executar este código C# nós teremos o seguinte resultado: Valor convertido com sucesso: 530,54 Se tentarmos atribuir um valor string a um tipo decimal, sem efetuar a conversão, teremos o seguinte erro de compilação: Cannot implicitly convert type string to decimal |
Delphi ::: Win32 API (Windows API) ::: Processos |
Como usar o Delphi para verificar se um determinado processo do Windows está sendo executadoQuantidade de visualizações: 20148 vezes |
|
Em algumas situações precisamos verificar se um determinado processo está sendo executado, ou seja, gostaríamos de saber se o executável "programa.exe" está carregado na memória e efetuar alguma tarefa se o teste resultar satisfatório. Nesta dica eu mostro como isso pode ser feito. O primeiro passo é acrescentar a unit TlHelp32 na cláusula uses do seu formulário. Esta unit contém algumas funções, tipos e definições úteis para se trabalhar com processos acessando a API do Windows. Uma vez importada a unit TlHelp32, coloque a função abaixo na seção implementation de seu formulário:
// função personalizada que permite verificar se um determinado
// processo está sendo executado
function isProcessRunning(exeFileName: string): Boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := False;
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
Agora, para testar a função, coloque o código abaixo no evento Click de um botão:
procedure TForm3.Button1Click(Sender: TObject);
begin
if isProcessRunning('notepad.exe') then
ShowMessage('O processo está sendo executado')
else
ShowMessage('O processo NÃO está sendo executado');
end;
Aqui nós estamos testando se o processo "notepad.exe" está sendo executado. Uma melhoria neste código seria listar todos os processos em execução ou listar as cópias em execução de um mesmo processo. |
C++ ::: Win32 API (Windows API) ::: Arquivos e Diretórios |
C++ Windows API - Como ler o conteúdo de um arquivo usando a função ReadFile() da Win32 APIQuantidade de visualizações: 9200 vezes |
|
A função ReadFile() é usada quando queremos ler o conteúdo de um arquivo. A leitura se inicia na posição zero do arquivo e mantém um ponteiro de arquivo, a partir do qual as leituras subsequentes ocorrerão. Esta função pode ser usada para leituras síncronas e assíncronas. Para leituras apenas assíncronas devemos usar ReadFileEx(). Veja seu protótipo na documentação da API do Windows: BOOL WINAPI ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped ); Antes de vermos um exemplo de como usar a função ReadFile(), vamos dar uma olhada em seus parâmetros: a) HANDLE hFile - Este é o handle para o arquivo a partir do qual queremos ler. Tal handle deve ser criado com o direito de acesso GENERIC_READ. b) LPVOID lpBuffer - Um ponteiro para o buffer que receberá os dados lidos do arquivo. c) DWORD nNumberOfBytesToRead - O número máximo de bytes a serem lidos de cada vez. Geralmente este número está relacionado à quantidade de bytes dos elementos do buffer. d) LPDWORD lpNumberOfBytesRead - Um ponteiro para uma variável que receberá o número de bytes lidos. A função ReadFile() define o valor desta variável como 0 antes de cada leitura e verificação de erros. e) LPOVERLAPPED lpOverlapped - Um ponteiro para um estrutura OVERLAPPED. Esta estrutura é exigida se o handle para o arquivo for obtido usando FILE_FLAG_OVERLAPPED para o parâmetro dwFlagsAndAttributes da função CreateFile(). Geralmente usamos NULL para este parâmetro. A função ReadFile() retorna quando um erro ocorre ou a quantidade de bytes solicitados é alcançada. Veja um trecho de código no qual lemos o conteúdo de um arquivo chamado testes.txt:
#include <cstdlib>
#include <iostream>
#include <windows.h>
#define TAM_BUFFER 256 // tamanho do buffer em bytes
using namespace std;
int main(int argc, char *argv[]){
// nome do arquivo
CHAR arquivo[] = "C:\\testes.txt";
CHAR buffer[TAM_BUFFER]; // buffer para o conteúdo do arquivo
DWORD nIn; // bytes lidos
// vamos abrir o arquivo para leitura.
// se o arquivo não existir uma mensagem de erro é exibida.
HANDLE hArquivo = CreateFile(arquivo, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hArquivo == INVALID_HANDLE_VALUE){
cout << "Erro ao abrir o arquivo: " << GetLastError() << endl;
}
else{
// arquivo aberto com sucesso. Vamos ler
while(ReadFile(hArquivo, buffer, TAM_BUFFER, &nIn, NULL) && nIn > 0){
cout << "Efetuei a leitura de " << nIn << " bytes." << endl;
// vamos adicionar o caractere de final de linha
// caso os bytes lidos não preencham todo o buffer
buffer[nIn] = 0;
cout << "Conteudo da leitura: " << buffer << endl;
}
}
// vamos fechar o handle
CloseHandle(hArquivo);
system("PAUSE");
return EXIT_SUCCESS;
}
|
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
|
MySQL - Como excluir a chave primária de uma tabela MySQL usando o comando ALTER TABLE DROP PRIMARY KEY |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





