Prévia do material em texto
1
CENTRO UNIVERSITÁRIO INTERNACIONAL UNINTER
ESCOLA SUPERIOR POLITÉCNICA
BACHARELADO EM ENGENHARIA ELÉTRICA
DISCIPLINA DE LINGUAGEM DE PROGRAMAÇÃO
ATIVIDADE PRÁTICA
LUCIANO DE OLIVEIRA – RU: 512410
PROF. WINSTON SEN LUN FUNG
TOLEDO – PR
2021
EXERCÍCIO 1
ENUNCIADO: Escreva um algoritmo em linguagem C que atenda os seguintes
requisitos: Crie um registro para armazenar o seu Nome Completo e o seu RU. Solicite
ao usuário que digite o seu RU e o seu Nome Completo. Crie um ponteiro para o
registro. Através do ponteiro para o registro verifique se o RU digitado é um número par
ou ímpar e informe a resposta na tela. Através do ponteiro para o registro imprima o
Nome Completo informado de traz para frente, invertido. Por exemplo: Pedro Alvares
Cabral -> larbaC seravlA ordeP Para demonstrar o funcionamento faça as capturas de tela
do terminal utilizando seu nome completo e o seu RU.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Registro {//criando struct/registro
int ru;//campo do registro que ira armazenar o valor do RU
char nome[60];//campo do registro que ira armazenar o valor do nome
};
int main(void){
struct Registro R;//declarando o registro "R"
printf("Digite seu RU: ");//pedindo ao usuario que informe seu RU
scanf("%d", &R.ru);//lendo e alocando no campo RU
printf("Informe seu nome: ");//pedindo ao usuario que informe seu nome
fflush(stdin);//limpando o excesso de buff da memoria
fgets(R.nome, 60, stdin);//coletando e alocando os caracteres informados
no campo nome
sscanf(R.nome,"%c",&R.nome);//lendo o campo nome do registro "R"
size_t tam = strlen(R.nome);//declarando variavel "tam" que ira
armazerar o tamanho do nome informado (para que possamos trabalhar com a
largura maxima)
char *p = (char *) &R.nome;//declarando ponteiro apontando para o campo
nome do registro "R"
while(tam--){//laco while/do decrementador
printf("%c", p[tam]);//imprime o que esta abrangido pelo ponteiro a
partir da largura, ou seja, do ultimo caracter para o primeiro
}
return 0;
}
EXERCÍCIO 2
ENUNCIADO: Escreva um algoritmo em linguagem C que atenda os seguintes requisitos:
Crie um vetor com a quantidade de dígitos do seu RU. Solicite que usuário digite o seu RU, cada
digito digitado deve ser armazenado em uma posição do vetor. Utilizando ponteiros verifique
qual o maior e menor número contido neste vetor e imprima na tela. Para demonstrar o
funcionamento faça as capturas de tela do terminal utilizando seu RU.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int i;//index, variavel de controle
char v[6];//vetor de 6 posições
printf("Informe o seu RU= ");//pede para o usuario informar seu RU
for (i = 0; i < 6; i++) {//laco for que aloca cada numero do RU em um
espaco da memoria
scanf("%c", &v[i]);//le e aloca em um espaco da memoria numero por
numero do RU informado
}
char *p = (char *) &v;//ponteiro apontado para o espaco na memoria onde
se encontra o vetor
char maior = p[0];//declarando variavel que ira receber o valor do maior
numero do vetor/RU
char menor = p[0];//declarando variavel que ira receber o valor do menor
numero do vetor/RU
for (i = 0; i < 6; i++) {//laco for que realiza a verificacao de qual o
maior numero
if (p[i] > maior) {//condicao que verifica qual o maior numero
maior = p[i];//quando a variavel maior recebe o valor do maior
numero, ate o momento
}
if (p[i] < menor) {//condicao que realiza a verificacao de qual o
menor numero
menor = p[i];//quando a variavel menor recebe o valor do menor
numero, ate o momento
}
}
printf("\nO maior numero deste RU e= %c\nO menor numero deste vetor e=
%c", maior, menor);//imprimindo na tela o maior e o menor numero
system("pause");
return 0;
}
EXERCÍCIO 3
ENUNCIADO: Faça um programa, em linguagem C, para calcular a área e o perímetro de um
hexágono. O programa deve implementar uma função chamada calc_hexa que calcula a área e o
perímetro de um hexágono regular de lado L. O programa deve solicitar ao usuário o lado do
polígono, calcular e imprimir a área e o perímetro do polígono. O programa termina quando for
digitado um valor negativo qualquer para o lado. A função deve obedecer ao seguinte protótipo:
void calc_hexa(float l, floar *area, float *perimetro); Lembrando que a área e o perímetro de um
hexágono regular são dados por: 𝑎𝑟𝑒𝑎 = 3 × 𝐿 2 × √3 2 𝑝𝑒𝑟í𝑚𝑒𝑡𝑟𝑜 = 6 × 𝐿 Para demonstrar o
funcionamento faça os print de tela utilizando o primeiro número do seu RU.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void calc_hexa(float L, float *area, float *perimetro){//funcao que recebe
por parametro valor de L e pede para que seja executados a linha de area e
perimetro
*area=3*pow(L,2)*sqrt(3)/2;//formula do calculo da area de um hexagono
*perimetro=6*L;//formula do calculo do perimetro de um hexagono
}
float main(){//metodo principal
float L, perimetro, area;//declarando a variavel L, responsavel por
receber o valor do lado do hexagono
printf("Informe o valor do lado= ");//pede para o usuario que informe o
valor de um lado de um hexagono
scanf("%f",&L);//le e aloca na memoria o valor informado pelo usuario
if(L<0){//condicao que verifica se e um valor valido
printf_s("Informe um valor positivo!\n");//caso nao seja um valor
valido, pede para que o usuario informe um valor positivo/valido
system("pause");//encerra o programa
exit(1);
}
else{//caso o valor informado seja valido:
calc_hexa(L,&area,&perimetro);//chama a funcao calc_hexa e envi como
parametro o vlaor de L e recebe o resultado de area e perimetro
printf("A area e= %.2f\n",area);//imprime o valor da area do
hexagono com lado informado pelo usuario
printf("O perimetro e= %.2f\n", perimetro);//imprime o valor do
perimetro do hexagono com lado informado pelo usuario
}
system("pause");
return 0;
}
EXERCÍCIO 4
ENUNCIADO: Faça, em linguagem C, uma função recursiva para o cálculo potenciação.
Sabe-se que o cálculo pode ser feito através de multiplicações sucessivas. Para
demonstrar o funcionamento utilize o primeiro digito do seu RU como base e o último
digito como expoente.
Solução do aluno:
Não esqueça de explicar o código com comentários!!
CTRL+C/CTRL+V do Visual Studio!!
Se desejar, defina as páginas do documento para PAISAGEM para melhor inserir os códigos.
#include <stdio.h>
#include <stdlib.h>
int pot(int base, int exp) //parametros que receberao os valores da base e d
o expoente, respectivamente
{
int res= 1; //variavel que recebera o resultado exponenciação
int i= exp; //variavel de controle (index)
/*
Testa expoente, se igual a 0,
retorna valor 1, pois, segundo a regra matematica, qualquer numero
elevado a 0 e igual a 1
*/
if (exp==0){
return 1;
}
/*
Se o expoente não for igual a 0, entao
o resulado sera igual a ele mesmo multiplicado pelo valor da base
a quantidade de vezes que o expoente indica
*/
else{
for (i;i>0;){ //enquanto expoente for maior que 0
res = res * base;
i--
; //decremento, para ir diminuindo um numero sempre que completar um ciclo
}
return res; //retorna o resultado final do
}
}
int main(void)
{
int num1 = 5, num2 = 0, result; //num1= primeiro numero do RU, num2= ult
imo numero do RU, result vai receber o valor retornado da funcao pot
/*result chama a funcao pot para receber o valor retornado dela
*/
result = pot (num1, num2); //passando num1 e num2 como parametro par
a a funcao pot
printf("O resultado de %d elevado a %d e= %d\n", num1, num2, result)
; //imprime o resultado final da exponenciacao
system("pause");
return 0;
}
Imagem do código funcionando no seu computador:
EXERCÍCIO 5
ENUNCIADO: Crie um programa, em linguagem C, que receba 10 registros contendo,
Nome, RU, telefone e email. Solicite que sejam digitados todos os dados de todos os
registros e ao final salve-os em um arquivo.csv, utilize o; (ponto e vírgula) para separador
e campo. O nome do arquivo deve ser o seu número de RU.
/*
Crie um programa, em linguagem C, que receba 10 registros contendo, Nome, RU
, telefone
email. Solicite que sejam digitados todos os dados de todos os registros e a
o final salve-os em um
arquivo.csv, utilize o ; (ponto e vírgula) para separador e campo. O nome do
arquivo deve ser o seu
número de RU
*/
#include <stdio.h>
#include <stdlib.h>
struct registros{//Estrutura que irá armazenar as variáveis do Registro
char nome[40];//variável que vai armazenar o primeiro nome
double RU;//variável que vai armazenar o RU
double fone;//Variável que vai armazenar o número de telefone
char email[30];//Variável que vai armazenar o endereço de e-mail
};
int main (){
int i;//Variável de controle (contagem, index)
struct registros R[10];//Chamando a Estrutura Registro, declarando a est
rutura de registro "R" com 10 posições
FILE *arquivo;//Declarando o arquivo com o ponteiro "arquivo"
arquivo=fopen("512410.csv","w");//Abrindo o arquivo do tipo .csv com meu
RU sendo o nome,tipo de abertura: criar um nome ou sobrescrever o já existe
nte "w"
/*
Logo abaixo, estrutura if-
else que verifica se o arquivo foi aberto ou não
*/
if (arquivo == NULL) {
printf("ERRO! O arquivo não foi aberto!\n");
}else {
printf("O arquivo foi aberto com sucesso!\n");
}
/*
Laço for usado para pedir ao usuário que informe os dados de cada aluno,
no total, serão 10 registros
*/
for(i=0;i<10;i++){
printf("Informe o primeiro nome= ");
scanf("%s",&R[i].nome);
printf("\nInforme seu RU= ");
scanf("%d",&R[i].RU);
printf("\nInforme o numero de telefone= ");
scanf("%d",&R[i].fone);
printf("\nInforme seu email= ");
scanf("%s",&R[i].email);
}
/*
Laço for que escreve todoso os registros no arquivo "512410.csv" separan
do-os por ";"(ponto e vírgula)
*/
for(i=0;i<10;i++){
fprintf(arquivo, "%s; %d; %d; %s",&R[i].nome,&R[i].RU,&R[i].fone,&R[
i].email);
}
fclose(arquivo);//Fechando o arquivo
system("pause");
return 0;
}
Imagem do código funcionando no seu computador: