Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Найти числа в массиве.

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

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте! Мне нужно найти в массиве числа, которые совпадают с последними разрядами своих квадратов. Я написала функцию, но она не работает. Больше на ум ничего не приходит. Помогите исправить пожалуйста.
Код: Выделить весь код
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);
	}
}

Отправлено: 18:32, 06-03-2014

 

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Привет Алёна.
Цитата alena_lep:
c+=a*pow(10.0, b); »
Цитата alena_lep:
int i=0, square, a, b=0, c=0; »
Почему инициализируете b нулём?
Цитата Drongo:
Почему нулём инициализация? Может degree = 1 лучше? »
Функция работать не будет, т.к. вы сравниваете квадрат последнего разряда с текущим элементом массива. 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. Сейчас попробую накодить чего-нибудь.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 19:25, 06-03-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


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

Код: Выделить весь код
...
   const int n =5;
   int mas[n] = {12, 22, 44, 66, 55};
...

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 19:49, 06-03-2014 | #3


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Drongo:
Блин, что-то я не понимаю задачу. Допустим у нас такой массив. Возводим 12 в квадрат = 144, что дальше? Отрываем два последних разряда 144 и ищем 44 среди массива, так? »
Например, у нас есть число 25, 25 в квадрате = 625. Оно совпадает с последними двумя разрядами, значит выводим 25. 5^2=25, 76^2=5776, их тоже выводим и т. д.

Цитата Drongo:
10.0 также бесполезно писать, т.к. тип у вас объявлен int, всё равно отбросится значение после точки. »
Если не так напишу, он мне вот что пишет:
pow: неоднозначный вызов перегруженной функции
может быть "long double pow(long double,int)"
или "float pow(float,int)"
или "double pow(double,int)"

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

Отправлено: 22:13, 06-03-2014 | #4


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я вот что поняла. переменная с записывает все квадраты элементов массива, и она оказывается очень большим числом. Поэтому моя функция и не работает. Если это исправить, то получится вот что, но она работает только для однозначных чисел, но как ее сделать для двух- трех- значных?
Код: Выделить весь код
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);
	}
}

Последний раз редактировалось alena_lep, 06-03-2014 в 22:55.


Отправлено: 22:31, 06-03-2014 | #5


Аватара для Tau_0

Ветеран


Сообщения: 6211
Благодарности: 1393

Профиль | Отправить PM | Цитировать


Цитата alena_lep:
Например, у нас есть число 25, 25 в квадрате = 625. »
А почему взяты числа по основанию десять...???...
25dec=19h
625dec=271h
Ну и что в каких разрядах на int (целые со знаком в этих числах совпает)...???...

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

Отправлено: 03:54, 07-03-2014 | #6


Пользователь


Сообщения: 121
Благодарности: 35

Профиль | Отправить PM | Цитировать


Цитата alena_lep:
Я вот что поняла. переменная с записывает все квадраты элементов массива, и она оказывается очень большим числом. Поэтому моя функция и не работает. Если это исправить, то получится вот что, но она работает только для однозначных чисел, но как ее сделать для двух- трех- значных? »
Вы не в том цикле обнуляете 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;
    }
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:52, 07-03-2014 | #7


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата torauma:
Вы не в том цикле обнуляете b и c. »
Да, точно не в том. Спасибо, так теперь работает.

Отправлено: 10:07, 07-03-2014 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Найти числа в массиве.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
NLB в изолированном массиве TMG 2010 DJ Mogarych ISA Server / Microsoft Forefront TMG 0 29-08-2012 16:35
C/C++ - В одномерном массиве tatarinbas Программирование и базы данных 1 16-12-2010 14:39
RAID - [решено] Новый диск в raid массиве Diesel315 Накопители (SSD, HDD, USB Flash) 3 11-04-2009 11:35
[решено] Ошибка в Raid массиве Stripe 0 Baw17 Непонятные проблемы с Железом 1 07-09-2008 18:50
Помогите найти ошибку в массиве bezumes Программирование и базы данных 5 28-03-2006 17:25




 
Переход