Em muitas situações nos deparamos com problemas complexos e abrangentes. Para resolver esse tipo de problema temos que dividí-lo em subproblemas mais simples e específicos, dividindo assim a sua complexidade e facilitando a resolução, através de procedimentos específicos.
FORBELLONE, A. L. V.; EBERSPACHER, H. F. Lógica de Programação. 3. ed. São Paulo: Makron Books, 2005.
Considere o algoritmo em pseudocódigo abaixo.
01 - Algoritmo quadrado
02 - Procedimento elevaAoQuadrado(x: inteiro)
03 - Início
04 - x <- x * x
05 - Fim_procedimento
06 - Var x: inteiro
07 - Início
08 - escreva("Insira o valor:")
09 - leia(x)
10 - elevaAoQuadrado(x)
11 - escreva(x)
12 - Fim
Sendo assim, tomando por base seus conhecimentos a respeito de procedimentos, leia as afirmações que se seguem.
I – A linha 2 contém a declaração da passagem por valor, do parâmetro x
. Assim a instrução da linha 11 imprimirá o resultado do cálculo do número informado pelo usuário elevado ao quadrado, na linha 9.
II – Independentemente da passagem de parâmetro da linha 2 ser definida como valor ou referência, o algoritmo será capaz de imprimir o quadrado do número inserido pelo usuário pois a variável x
, declarada na linha 6 irá sobrepor a declaração da linha 2.
III – O procedimento foi declarado com sintaxe correta, dispensando o uso da palavra reservada "retorne
", palavra essa que é reservada à sintaxe de declaração de funções.
Sendo assim, é correto o que se afirma em:
Alternativas
Alternativa 1:
I, apenas.
Alternativa 2:
II, apenas.
Alternativa 3:
III, apenas.
Alternativa 4:
I e III, apenas.
Alternativa 5:
II e III, apenas.
O código que você me enviou é um programa em C que usa um procedimento chamado elevaAoCubo para tentar calcular o cubo de um número inteiro. Um procedimento é uma subrotina que não retorna nenhum valor, mas pode realizar alguma ação ou modificar algum parâmetro. Analisando as afirmações sobre o programa, temos que:
- A afirmação I é verdadeira, pois o procedimento elevaAoCubo não possui o comando return, o que não acarreta em erro sintático. Um procedimento não precisa retornar nenhum valor, mas pode usar o comando return para encerrar sua execução antes do final.
- A afirmação II é falsa, pois em tempo de execução, na linha 09, caso o usuário informe o número 3 para armazenar em n, o programa irá imprimir na tela (na linha 11), o valor 3, e não 27. Isso acontece porque o procedimento elevaAoCubo recebe o parâmetro x por valor, e não por referência. Isso significa que ele recebe uma cópia do valor de n, e não o endereço de memória de n. Portanto, quando ele modifica o valor de x na linha 04, ele não está alterando o valor de n na função main. Para que o procedimento elevaAoCubo pudesse modificar o valor de n, ele deveria receber um ponteiro para n como parâmetro, e usar o operador de desreferenciamento (*) para acessar e alterar o valor apontado por esse ponteiro.
- A afirmação III é verdadeira, pois da forma como foi escrito, o procedimento elevaAoCubo não é capaz de produzir resultado algum. Ele calcula o cubo de x na linha 04, mas não retorna esse valor nem modifica o valor de n na função main. Ele apenas descarta esse valor ao terminar sua execução.
Portanto, a alternativa correta é a 4: I e III, apenas.
Para escrever sua resposta aqui, entre ou crie uma conta
Compartilhar