C/C++ - [решено] Найти числа в массиве.

Ответить
Аватара пользователя
alena_lep

C/C++ - [решено] Найти числа в массиве.

Сообщение alena_lep »

Здравствуйте! Мне нужно найти в массиве числа, которые совпадают с последними разрядами своих квадратов. Я написала функцию, но она не работает. Больше на ум ничего не приходит. Помогите исправить пожалуйста.

Код: Выделить всё

void Get(int mas[], int n)
{
	int i=0, square, a, b=0, c=0;
	for(; i<n; i++)
	{
		square=mas[i]*mas[i];
		do
		{
			a=square%10;
			square/=10;
			c+=a*pow(10.0, b);
			if(c==mas[i])
			{
				printf("elem: %d ", mas[i]);
			}
			else
			{
				b++;
			}
		}
		while(square>0);
	}
}
Аватара пользователя
Drongo

Re: C/C++ - [решено] Найти числа в массиве.

Сообщение Drongo »

Привет Алёна.


Цитата alena_lep:



c+=a*pow(10.0, b);
C/C++ - [решено] Найти числа в массиве.





Цитата alena_lep:



int i=0, square, a, b=0, c=0;
C/C++ - [решено] Найти числа в массиве.




Почему инициализируете b нулём?


Цитата Drongo:



Почему нулём инициализация? Может degree = 1 лучше?
C/C++ - [решено] Исключить из числа четные цифры.




Функция работать не будет, т.к. вы сравниваете квадрат последнего разряда с текущим элементом массива. 10.0 также бесполезно писать, т.к. тип у вас объявлен int, всё равно отбросится значение после точки.



Код:

Код: Выделить всё

c += a * pow(10.0, b);
         if(c == mas[i]){

Вам надо разбить задачу на две подзадачи(две функции, вторую функцию вызывать из первой после вычисления квадратов последних разрядов)

1. Функция GetQuadre(int mas[], int n) // Вычисляем последний разряд квадрата считаного числа (что подразумевается под последними разрядами? 1 цифра или 2 цифры? Число может получиться разным...)

2. Функция SearchQuadre(int quadre) // Передаём полученый "оторваный" разряд(ы) на поиск по массиву.



P.S. Сейчас попробую накодить чего-нибудь.
Аватара пользователя
Drongo

Re: C/C++ - [решено] Найти числа в массиве.

Сообщение Drongo »

Блин, что-то я не понимаю задачу. Допустим у нас такой массив. Возводим 12 в квадрат = 144, что дальше? Отрываем два последних разряда 144 и ищем 44 среди массива, так?





Код:

Код: Выделить всё

...
   const int n =5;
   int mas[n] = {12, 22, 44, 66, 55};
...
Аватара пользователя
alena_lep

Re: C/C++ - [решено] Найти числа в массиве.

Сообщение alena_lep »

Цитата Drongo:



Блин, что-то я не понимаю задачу. Допустим у нас такой массив. Возводим 12 в квадрат = 144, что дальше? Отрываем два последних разряда 144 и ищем 44 среди массива, так?
C/C++ - [решено] Найти числа в массиве.




Например, у нас есть число 25, 25 в квадрате = 625. Оно совпадает с последними двумя разрядами, значит выводим 25. 5^2=25, 76^2=5776, их тоже выводим и т. д.




Цитата Drongo:



10.0 также бесполезно писать, т.к. тип у вас объявлен int, всё равно отбросится значение после точки.
C/C++ - [решено] Найти числа в массиве.




Если не так напишу, он мне вот что пишет:

pow: неоднозначный вызов перегруженной функции

может быть "long double pow(long double,int)"

или "float pow(float,int)"

или "double pow(double,int)"




Цитата Drongo:



1. Функция GetQuadre(int mas[], int n) // Вычисляем последний разряд квадрата считаного числа (что подразумевается под последними разрядами? 1 цифра или 2 цифры? Число может получиться разным...)
C/C++ - [решено] Найти числа в массиве.




Вот именно, что число может получиться разным, для однозначного числа нужно вычислить одну цифру, для двузначного - две. Только я не понимаю, как это реализовать.
Аватара пользователя
alena_lep

Re: C/C++ - [решено] Найти числа в массиве.

Сообщение alena_lep »

Я вот что поняла. переменная с записывает все квадраты элементов массива, и она оказывается очень большим числом. Поэтому моя функция и не работает. Если это исправить, то получится вот что, но она работает только для однозначных чисел, но как ее сделать для двух- трех- значных?

Код: Выделить всё

void Get(int mas[], int n)
{
	int i=0, square, a, b=0, c=0;
	for(; i<n; i++)
	{
		square=mas[i]*mas[i];
		do
		{
			a=square%10;
			square/=10;
			c+=a*pow(10.0, b);
			if(c==mas[i])
			{
				printf("elem: %d ", mas[i]);
			}
			else
			{
				b++;
			}
			c=0;
			b=0;
		}
		while(square>0);
	}
}
Аватара пользователя
Tau_0

Re: C/C++ - [решено] Найти числа в массиве.

Сообщение Tau_0 »

Цитата alena_lep:



Например, у нас есть число 25, 25 в квадрате = 625.
C/C++ - [решено] Найти числа в массиве.




А почему взяты числа по основанию десять...???...

25dec=19h

625dec=271h

Ну и что в каких разрядах на int (целые со знаком в этих числах совпает)...???...



Либо сравнивайте на полубайтах (ниблах), либо уходите на десятичную арифметику... Вот только у процессора нет представления десятичных чисел... И тогда нужно строковые/символьные данные вводить и с ними работать...
Аватара пользователя
torauma

Re: C/C++ - [решено] Найти числа в массиве.

Сообщение torauma »

Цитата alena_lep:



Я вот что поняла. переменная с записывает все квадраты элементов массива, и она оказывается очень большим числом. Поэтому моя функция и не работает. Если это исправить, то получится вот что, но она работает только для однозначных чисел, но как ее сделать для двух- трех- значных?
C/C++ - [решено] Найти числа в массиве.




Вы не в том цикле обнуляете b и c. Вот так вроде работает:

Код: Выделить всё

void Get(int mas[], int n)
{
    int i=0, square, a, b=0, c=0;
    for(; i<n; i++)
    {
        square=mas[i]*mas[i];
        do
        {
            a=square%10;
            square/=10;
            c+=a*pow(10.0, b);
            if(c==mas[i])
            {
                printf("elem: %d ", mas[i]);
            }
            else
            {
                b++;
            }
            //c=0;
            //b=0;
        }
        while(square>0);
        c=0;
        b=0;
    }
}
Аватара пользователя
alena_lep

Re: C/C++ - [решено] Найти числа в массиве.

Сообщение alena_lep »

Цитата torauma:



Вы не в том цикле обнуляете b и c.
C/C++ - [решено] Найти числа в массиве.




Да, точно не в том. Спасибо, так теперь работает.
Ответить

Вернуться в «Программирование и базы данных»