Baixe o app para aproveitar ainda mais
Prévia do material em texto
CENTRO UNIVERSITÁRIO INTERNACIONAL UNINTER ESCOLA SUPERIOR POLITÉCNICA BACHARELADO EM ENGENHARIA DE PRODUÇÃO DISCIPLINA DE LÓGICA DE PROGRAMAÇÃO E ALGORITMOS ATIVIDADE PRÁTICA MICHELE NUNES OLIVEIRA PEREIRA – RU: 2824461 PROFESSOR VINICIOS BORIN BOM SUCESSO DE ITARARÉ– SÃO PAULO 2020 1 Exercício 1: Faça um algoritmo em linguagem C para calcular quanto cada cliente gastou em pedidos realizados em uma lancheria. A lancheria vende os seguintes produtos: Item Produto Código Preço Unitário 1 Cachorro-quente 100 5,00 2 X-salada 101 8,79 3 X-bacon 102 9,99 4 Misto 103 6,89 5 Salada 104 4,80 6 Água 105 3,49 7 Refrigerante 106 4,99 Ao iniciar o programa, deve-se aparecer na tela um menu com todos os itens vendidos e seus respectivos preços. O usuário deve escolher digitando de 1-7 qual item quer comprar. Observe que o usuário pode comprar o mesmo item diversas vezes e também pode comprar vários itens diferentes (exemplo: 2 águas e um cachorro-quente, no mesmo pedido). Para encerrar o processo de compra, o usuário deve digitar um valor diferente de 17. Ao encerrar a compra, deve-se listar todos os itens comprados, seus preços individuais e o total a se pagar. Imprima na tela um teste do seu programa utilizando os três primeiros e os últimos dígi- tos do seu RU da UNINTER como os valores de entrada para os pedidos. Os três primeiros dígitos serão os itens comprados, e os três últimos a quantidade de cada item comprado. Por exemplo, se seu RU for 1234567, a compra resultante será: Item Produto Quantidade 2 (1º dígito) Cachorro-quente 4 (antepenúltimo dígito) 8 (2º dígito) X-salada 6 (penúltimo dígito) 2 (3º dígito) X-bacon 1 (último dígito) Solução do aluno: #include <stdio.h> #include <string.h> #include <locale> #define TOTAL_PRODUTOS 7 int main() { setlocale(LC_ALL, ""); // Acentuação em português // declaração de variáveis int op, qtd[TOTAL_PRODUTOS]; float total[TOTAL_PRODUTOS], final = 0; char produtos[TOTAL_PRODUTOS][20]; strcpy_s(produtos[0], "cachorro-quente"); strcpy_s(produtos[1], "x-salada"); strcpy_s(produtos[2], "x-bacon"); strcpy_s(produtos[3], "misto"); strcpy_s(produtos[4], "salada"); strcpy_s(produtos[5], "água"); strcpy_s(produtos[6], "refrigerante"); // Menu de Opções system("cls"); printf("ITEM PRODUTO CÓDIGO VALOR UNITÁRIO\n"); printf("1 CACHORRO-QUENTE 100 5,00\n"); printf("2 X-SALADA 101 8,79\n"); printf("3 X-BACON 102 9,99\n"); printf("4 MISTO 103 6,89\n"); printf("5 SALADA 104 4,80\n"); printf("6 ÁGUA 105 3,49\n"); printf("7 REFRIGERANTE 106 4,99\n"); printf("Escolha o produto:"); scanf_s("%i", &op); while ((op >= 1) && (op <= 7)) { switch (op) { case 1: //cachorro-quente printf("Você escolheu: "); puts(produtos[0]); printf("Quantos deseja comprar?"); scanf_s("%i", &qtd[0]); total[0] = qtd[0] * 5.00; break; case 2: //x-salada printf("Você escolheu: "); puts(produtos[1]); printf("Quantos deseja comprar?"); scanf_s("%i", &qtd[1]); total[1] = qtd[1] * 8.79; break; case 3: //x-bacon printf("Você escolheu: "); puts(produtos[2]); printf("Quantos deseja comprar?"); scanf_s("%i", &qtd[2]); total[2] = qtd[2] * 9.99; break; case 4: //misto printf("Você escolheu: "); puts(produtos[3]); printf("Quantos deseja comprar?"); scanf_s("%i", &qtd[3]); total[3] = qtd[3] * 6.89; break; case 5: //salada printf("Você escolheu: "); puts(produtos[4]); printf("Quantos deseja comprar?"); scanf_s("%i", &qtd[4]); total[4] = qtd[4] * 4.80; break; case 6: //água printf("Você escolheu: "); puts(produtos[5]); printf("Quantos deseja comprar?"); scanf_s("%i", &qtd[5]); total[5] = qtd[5] * 3.49; break; case 7: //refrigerante printf("Você escolheu: "); puts(produtos[6]); printf("Quantos deseja comprar?"); scanf_s("%i", &qtd[6]); total[6] = qtd[6] * 4.99; break; } printf("Escolha o produto:"); scanf_s("%i", &op); } for (int i = 0; i < TOTAL_PRODUTOS; i++) { if (qtd[i] > 0) { puts(produtos[i]); printf("Quantidade: %i | Total a pagar: %.2f\n", qtd[i], to- tal[i]); // final = final + total[i]; final += total[i]; } } printf("Total do pedido: %.2f", final); return 0; } Imagem do código funcionando no seu computador: Nessa primeira atividade montei minha estrutura básica conforme o professor Vinícios Borin nos ensinou, já no início introduzi na biblioteca o que seria necessário para cada co- mando como: stdio, string para poder utilizar a função strcpy e locale para fazer a leitura cor- reta dos acentos. Criei as variáveis necessárias: int op que é uma variável inteira para o menu (vetor de quantidade), float total para o cálculo do valor individual de cada produto e porque vamos utilizar a vírgula e por último o char produtos que é uma matriz com duas dimensões, onde o número de linhas é o número de produtos e o número de colunas é número máximo de cada palavra, também coloquei um #define TOTAL_ PRODUTOS 7 para definir o total de produtos. Criei um menu para os pedidos, utilizei o laço de repetição while, fiz um switch case para os sete produtos vendidos, fiz uso do printf, scanf e o puts para imprimir na tela. OBS: Como o enunciado nos pede para utilizar os três primeiros números do nosso RU para fazer os pedidos e os três últimos para a quantidade de cada produto, no meu caso consegui apenas fazer o primeiro, porque o número de produtos do menu corresponde a 7 e o meu RU é 2824461, quando vou fazer o segundo pedido e digito um número maior que no caso é o 8 o meu programa finaliza a compra. Exercício 2: Faça um algoritmo em linguagem C que receba como dado de entrada a quantidade máxima em milímetros que um reservatório de água suporta. E também como dado de entrada informe quantos milímetros de chuva tivemos em cada mês do ano, e quantos milímetros deste reservatório por mês foi gasto. Armazene as informações de cada mês em vetores de dados. Sabendo a capacidade do reservatório, quanto choveu em cada mês e quanto foi gasto. Informe o valor disponível de água, em milímetros, para cada mês do ano. Caso o reservatório fique vazio em algum momento, informe isso na tela. Caso o reservatório fique cheio em algum momento, também informe isso na tela. Imprima na tela um teste do seu programa utilizando o seu RU da UNINTER como os valores de entrada, cada dígito do seu RU será um dos valores gastos, em milímetros, por mês. Por exemplo, se seu RU for 1234567, faça: Jan 1 mm (1º dígito) Fev 2 mm (2º dígito) Mar 3 mm (3º dígito) Abr 4 mm (4º dígito) Mai 5 mm (5º dígito) Jun 6 mm (6º dígito) Jul 7 mm (7º dígito) Ago 1 mm (1º dígito) Set 2 mm (2º dígito) Out 3 mm (3º dígito) Nov 4 mm (4º dígito) Dez 5 mm (5º dígito) Como dado de entrada, utilize os três últimos valores do seu RU. Solução do aluno: #include<stdio.h> //Inclusão de biblioteca s de entrada e saida #include<stdlib.h> #include<locale.h> #define TAMANHOVETOR 12 //definiçãção de tamanho do vetor int main() { //Declaração de inicio e tipo de função principal float somaChuv[12], somaAgua[12], restante[12], ttl[12]; //Variavel deve do tipo float, pois os numeros podemser decimais int reservatorio, c; setlocale(LC_ALL, "Portuguese");//Biblioteca de acentuação em portugues printf("***CADASTRO DO RESERVATORIO**** \n"); printf("Reservatorio em milimetro - informe o valor : \n"); //Usuario digita o valor maximo de capacidade do reservatorio em m ilimetr os scanf_s("%i", &reservatorio); //É feita a leitura da quantidade digitada pelo usuario printf("****CADASTRO DE CHUVA E GASTO DE AGUA***** \n"); for (c = 1; c <= TAMANHOVETOR; c++) { printf("Valor de chuva no mes %d ? \n", c); //Usuario digita a quantidade de chuva em cada mes do ano scanf_s("%f", &somaChuv[c]); //É feita a leitura da quantidade digitada pelo usu- ario printf("***********\n"); printf(" Gasto de agua no mes %d ? \n", c); //Usuario digita a quantidade de agua gasta em c ada mes do ano scanf_s("%f", &somaAgua[c]); //É feita a leitura da quantidade digitada pelo usu- ario restante[c] = somaChuv[c] - somaAgua[c]; //É feita as operações aritmeticas per- tinentes aos valores digitados pelo usuario ttl[c] = restante[c] + reservatorio; //É feita as operações aritmeticas pertinen- tes aos valores digitados pelo usuario printf("\n"); if (ttl[c] <= 0) { printf(" RESERVATORIO VAZIO E COM CAPACIDADE MAXIMA !!!! \n"); //Mensagem para usuario } if (ttl[c] > reservatorio) { printf(" RESERVATÓRIO CHEIO - CONTROLE SEU RESERVATORIO !!!! \n"); //Mensagem para usuario } printf(" NIVEL TOTAL EM: %.2f mm\ n", ttl[c]); //Mensagem para usuario } return 0; } Exercício 3: Faça um algoritmo em linguagem C que receba como dado de entrada uma matriz de caracteres. Cada posição da matriz deve armazenar um caractere. A dimensão da matriz deverá ser MxN, onde M e N são dados de entrada escolhidos pelo usuário. Declare a matriz como sendo de dimensão máxima 10x10, e valide os valores de M e N, que devem estar entre 1 e 10, incluindo 1 e 10. Para a validação, o usuário deve ficar preso no programa enquanto não digitar um número válido para M e para N. Após escolhida a dimensão da matriz e povoado ela com caracteres. Faça: • Conte o número de ocorrências de cada caractere que aparece na ma- triz. Após a contagem, liste cada caractere digitado e o número de ocorrências; • Crie uma função que receba como parâmetro o primeiro caractere ca- dastrado na matriz. A função deve retornar um dado numérico. Se o caractere for maiúsculo, retorne na função o resultado deste caractere dividido por 10. Caso contrário, retorne o resultado do caractere multiplicado por 2; Imprima na tela um teste do seu programa utilizando como primeiro caractere a primeira letra do seu nome. Solução do aluno: #include <stdio.h> #include <stdlib.h> #include <locale.h> // ** funções auxiliares **// void digQuantMxN(); void digDadosMatriz(); void imprimirMatriz(); void mostraOcorrenciaCaracteres(); void manipulaDado(); // *** variaveis **// int i, j, k, m, n, c, x, indice, cont; float pri, resultado; char str[10][10], vetor[100], aux; // ** função principal **// int main() { setlocale(LC_ALL, ""); // Acentuação em português digQuantMxN(); //Função pede para o usuário digitar os valores de linha e coluna da matriz. printf("\n\n"); //pula duas linhas para organização. digDadosMatriz(); //Função pede para o usuário digite os valores da matriz. printf("\n"); //pula duas linhas para organização. imprimirMatriz(); //Função que imprime a matriz. printf("\n\n"); //pula duas linhas para organização. mostraOcorrenciaCaracteres(); //Função que mostra as ocorrencias dos caracteres printf("\n\n"); //pula duas linhas para organização. manipulaDado(); //função manipula o primeiro dados da matriz. printf("n\n"); //pula uma linha para organização. system("pause"); return 0; } // *** função para digitar a quantidade de linha e coluna **// void digQuantMxN() { do { //imprime instrucões ao usuário printf(" \n\n Digite a quantidade de linhas de 1 a 10: "); scanf_s("%d", &m);// amarzena o dado na variavel. while ((c = getchar()) != '\n' && c != EOF) {} //limpa buffer de te- chado. } while (m < 1 ||m > 10);// validação dos numeros de 1 a 10 do { //imprime instrucões ao usuário printf(" \n\n Digite a quantidade de colunas de 1 a 10: "); scanf_s("%d", &n);// amarzena o dado na variavel. while ((c = getchar()) != '\n' && c != EOF) {} //limpa buffer de te- chado. } while (n < 1 || n > 10);// validação dos numeros de 1 a 10 } // *** função para carregar dados na matriz **// void digDadosMatriz() { for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { //mostra para o usuario a posição que esta a matriz. printf(" Digite o caracter [%d] [%d]: ", i, j); scanf_s("%c", &str[i][j]); // amarzena o dado digitado pelo usu- ário e armazena na variavel. while ((c = getchar()) != '\n' && c != EOF) {} //limpa buffer de techado. } } } // ** função imprime os dados da matriz **// void imprimirMatriz() { // imprime mensagem para usuario printf(" Matriz formada MxN.\n"); for (i = 0; i < m; i++) { printf(" \n");//dá espaço na tela //imprime o valor da matriz for (j = 0; j < n; j++) { printf(" %c\t", str[i][j]); } } } // ** função mostra as ocorrências dos caracteres **// void mostraOcorrenciaCaracteres() { indice = 0;// inicia a variavel em 0. //transforma a matriz em vetor for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { vetor[indice] = str[i][j]; indice++; } } for (i = 0; i < indice; i++) { for (j = i + 1; j < indice; j++) { if (vetor[i] > vetor[j]) { aux = vetor[i]; vetor[i] = vetor[j]; vetor[j] = aux; } } } cont = 1; //Se está na lista então aparece pelo menos 1 vez for (i = 1; i < indice; i++) { //Note que começa com i=1 para já comparar o segundo com o primeiro no if abaixo: if (vetor[i] == vetor[i - 1]) { //Se é igual ao anterior incrementa o contador cont++; } else { //Se mudou o número if (cont >= 2) { //Acabou de contar o número anterior então podemos imprimir //o número de vezes que ele aparece: 1], cont); printf(" O caracter %c aparece %d vezes! \n",vetor[i - 1], cont); //Recomeça a contagem para o novo número: cont = 1; } else { //Acabou de contar o número anterior então podemos imprimir //o número de vezes que ele aparece: printf(" O caracter %c aparece %d vez!\n", ve- tor[i - 1], cont); //Recomeça a contagem para o novo número: cont = 1; } } } if (cont >= 2) { //Também imprime para o último número: printf(" O caracter %c aparece %d vezes!\n", vetor[i - 1], cont); } else { //Também imprime para o último número: printf(" O caracter %c aparece %d vez!\n", vetor[i - 1], cont); } }// ** função manipula primeiro dado da matriz void manipulaDado() { //imprime informações ao usuário pri = str[0][0]; printf(" O primeiro caracter da matriz = \"%c\" \n", str[0][0]); if ((pri >= 65) && (pri <= 90)) { printf(" O caracter \"%c\" eh uma letra maiusculo", str[0][0]); resultado = pri / 10; printf("\n A funcao pedida para esse tipo de caracter resulta em: %.1f ", resultado); } else { printf(" O caracter \" %c \" eh uma letra minuscula", str[0][0]); resultado = pri * 2; printf("\n A funcao pedida para esse tipo de caracter resulta em: %.0f ", resultado); } } Para a resolução deste problema, primeiro montei a estrutura básica do meu programa com as bibliotecas que seriam necessárias, criei funções auxiliares como o professor Vinicios Borin nos explicou que seria necessário, função principal entre outras e assim fiz a matriz MxN com a dimensão dentro do que se pede no enunciado que é de no máximo 10x10, contei o número de ocorrências de cada caractere e listei cada um, criei a função que como parâmetro recebe o primeiro caractere e retorne com um dado numérico e no meu caso o caractere foi minúsculo, por isso o meu resultado foi multiplicado por 2 e para o teste imprimi meu nome ne tela.
Compartilhar