Algoritmo solicitado 1

Esse algoritmo foi solicitado pela Jeanne e envolve a leitura de strings e seu armazenamento array (nesse caso, uma matriz). Respondi as dúvidas levantadas e também completei o algoritmo, avançando um pouco a solução para o uso de estruturas, que se adéquam bem ao problema.

Um detalhe que somente percebi depois é que a solicitação era para utilizar C++ e acabei utilizando a linguagem C. Os códigos funcionarão nas duas linguagens, apenas sendo necessário alterar as bibliotecas utilizadas.

O enunciado enviado foi o seguinte: “Construa um programa em C para armazenar o nome (string) e o salário de certa quantidade de pessoas em um vetor. Seu algoritmo deve calcular e armazenar o novo salário sabendo-se ocorreu um reajuste de 8% para salários inferiores a R$1.500,00 e de 5% para salários iguais ou superiores a este valor. A quantidade de pessoas deve ser previamente informada pelo usuário. O resultado deverá ser impresso em um novo vetor.

Eu tenho que usar, gets e puts. Estou fazendo uma tentativa, mas empaquei no vetor. Ele está inicializando com um valor e não estou achando o erro”.

Abaixo, o código enviado pela solicitante:

Primeiramente, na linha 4, não entendo o porque da necessidade de ter uma variável global para o problema. Sendo assim, o primeiro passo é transferir a declaração da variável para dentro do escopo da função main().

Outra questão menor é o incremento aplicado na instrução for. Não faz sentido usar “i=i++”. Com o operação utilizada, se está atribuindo o valor da variável i a ela mesmo e depois incrementado o valor em uma unidade. Deve ser utilizado apenas “i++” ou então “i=i+1”.

Outro cuidado com relação ao for é na condição de parada. Considerando o valor 3 para a variável qtdFunc, a condição “i<=qtdFunc” gerará 4 iteração do loop (a iteração correrá com os valores para i iguais a 0, 1, 2 e 3) e o correto é fazer apenas 3. Com isso, a condição deveria ser “i<qtdFunc”.

Para receber o nome dos funcionários, foi utilizado a função gets(). Essa função normalmente gera um warningthe `gets’ function is dangerous and should not be used” e por isso recomendo utilizar outra função, a fgets(). Tudo bem que a questão pediu para utilizar gets(), mas isso acontece quando a questão foi elaborada muitos anos atrás e não deve ter problema utilizar uma alternativa melhor.

A função fgets() é muitas vezes associada com a leitura de arquivos, mas pode ser utilizada em substituição da gets(). A função fgets() permite incluir o caractere de nova linha e também especifica o tamanho máximo da string de entrada (esse é o motivo do warning da função gets() que, por não permitir definir o tamanho máximo, pode causar um estouro de buffer). E veja bem, tanto a fgets() e gets() dispensam o uso de fflush(stdin), já que elas leem o caractere de nova linha.

A função fgets() espera 3 parâmetros: (1) a variável de string que vai armazenar o valor; (2) o tamanho máximo da string, subtraído de 1 por causa do ‘\0’; e (3) valor stdin, para informar que é para considerar a entrada do teclado.

Veja também que na linha 7, para ler a quantidade de funcionários, eu adicionei um “\n” junto com a máscara para inteiro. Isso foi para que o enter pressionado ao digitar o número não seja lido posteriormente como um nome de funcionário. Retire o “\n” para perceber o problema e ver que um dois nomes ficará em branco.

Com as alterações, o código ficará o seguinte:

Para testar o código online, utilize o link: https://ideone.com/FBicCy

Dando continuidade ao restante da solicitação, segue o restante do código:

Observe que eu utilizei duas formas diferentes de calcular o aumento salarial. Eu prefiro a que utilizei para aplicar o aumento de 8%, mas para quem gosta de complicar e também desperdiçar processamento computacional, tem o cálculo utilizado para o aumento de 5%.

Para testar o código online, utilize o link: https://ideone.com/FBicCy

Uma recomendação importante a fazer sobre a solução apresentada é que ela deveria utilizar uma struct para armazenar o nome e o salário de cada funcionário e não fazer isso utilizando dois vetores. Logicamente isso depende da pessoa saber utilizar structs e já ter visto o assunto na disciplina, mas segue a solução com a estrutura:

Essa solução pode ser testada online através do link: https://ideone.com/lUXVDX

 

Share

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.