Informática, perguntado por RebecaAlves153, 9 meses atrás

Escreva uma função em C++ chamada arredonda que recebe como parâmetros de entrada dois valores reais x e y que representam as coordenadas de um ponto (x, y) no plano cartesiano e retorna dois valores inteiros a e b que representam as coordenadas do ponto discreto (a, b) mais próximo do ponto (x, y). Para o arredondamento, considere que o decimal 0.5 deve ser arredondado para cima (considerando o número em módulo).

Faça um programa que leia uma sequência de pares de valores reais representando as coordenadas de pontos no plano cartesiano e mostra na tela qual é a menor distância entre os pontos discretos correspondentes (calculados com a função arredonda) e a origem. Para calcular a distância de um ponto discreto (a, b) à origem considere a chamada distância de Manhattan, definida como |a| + |b|.

O programa deve terminar quando o usuário digitar o par 0 0, que não deve ser considerado como um ponto válido, apenas indica o final da sequência.

Por exemplo: se o usuário digitar a sequência 2 3 -2.5 3.1 -2.2 3.8 -2.7 -4.3 0 -5 0 0 então há os seguintes pontos: (2, 3), (-2.5, 3.1), (-2.2, 3.8), (-2.7, -4.3) e (0, -5), cujos pontos discretos correspondentes, arredondando as coordenadas, são: (2, 3), (-3, 3), (-2, 4), (-3, -4) e (0, -5). As distâncias de Manhattan correspondentes são: 5, 6, 6, 7 e 5. Portanto, o programa deve imprimir na tela o valor 5.

Soluções para a tarefa

Respondido por heitorpedrosa
2

#include <iostream>

#include <cmath>

#include <climits>

using namespace std;

float arredonda ( float x, float y, int &a, int &b);

int main () {

   float x, y;

   int a = 0, b = 0, menorValor = INT_MAX;

   

   do {

       cin >> x >> y;

       

       arredonda ( x, y, a, b );

       

       if ( a < 0 ) {

           a *= -1;

       }

       if ( b < 0 ) {

           b *= -1;

       }

       

       if ( a + b < menorValor && a + b != 0) {

           menorValor = a + b;

       }

   } while ( x + y != 0 );

   cout << menorValor;

   

   return 0;

}

float arredonda ( float x, float y, int &a, int &b) {

   int auxiliarX, auxiliarY;

   if ( x < 0 ) {

       x *= -1;

       auxiliarX = x;

       if ( x - auxiliarX >= 0.5 ) {

           a = ceil ( x ) * -1;

       }

       else {

           a = floor ( x ) * -1;

       }

   }

   else {

       auxiliarX = x;

       if ( x - auxiliarX >= 0.5 ) {

           a = ceil ( x );

       }

       else {

           a = floor ( x );

       }

   }

   

   if ( y < 0 ) {

       y *= -1;

       auxiliarY = y;

       if ( y - auxiliarY >= 0.5 ) {

           b = ceil ( y ) * -1;

       }

       else {

           b = floor ( y ) * -1;

       }

   }

   else {

       auxiliarY = y;

       if ( y - auxiliarY >= 0.5 ) {

           b = ceil ( y );

       }

       else {

           b = floor ( y );

       }

   }

}

Perguntas interessantes