Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2013, 01:18   #1
_ROBERT_
Пользователь
 
Регистрация: 24.10.2012
Сообщений: 11
По умолчанию объясните работу программы

Дан целочисленный массив A из N элементов (0<N<100;0<A[i]<100). Определить те его элементы, индексы которых являются степенями двойки (1,2,4,8,16, ...). Заранее благодарен.
PAscal
Код:
uses crt;
const nmax=99;
var a:array[1..nmax] of integer;
    n,i:integer;
begin
clrscr;
randomize;
repeat
write('Размер массива до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Исходный массив:');
for i:=1 to n do
 begin
  a[i]:=random(99)+1;
  write(a[i]:4);
 end;
writeln;
writeln('Элементы, чьи индексы есть степени числа 2:');
i:=1;
while i<=n do
 begin
  write(a[i]:4);
  i:=i*2;
 end;
readln
end.
с++
Код:
#include <iostream>
#include <cstdlib>
#include <ctime>
 
bool isPowerOfTwo (int );
 
int main ()
{
    srand(time(0));
    const int arraySize = 25;
    int array[arraySize];
 
    std::cout << "Array: " << std::endl;
    for (int i = 0; i < arraySize; i++)
        std::cout << (array[i] = rand () % 101) << " ";
    std::cout << std::endl;
 
    std::cout << "Element of array: " << std::endl;
    for (int i = 0; i < arraySize; i++)
        if (isPowerOfTwo(i + 1))
            std::cout << array[i] << " ";
    std::cout << std::endl;
 
    return 0;
}
 
bool isPowerOfTwo (int value)
{
    int tmpValue = 2;
    while (tmpValue < value)
        tmpValue *= 2;
    return (tmpValue == value);
}
_ROBERT_ вне форума Ответить с цитированием
Старый 14.05.2013, 01:41   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Код:
bool isPowerOfTwo (int value)
{
    int tmpValue = 2;
    while (tmpValue < value)
        tmpValue *= 2;
    return (tmpValue == value);
}
Берется текущий индекс массива - value. Затем начинаем двойку в цикле возводить во вторую степень, пока это значение меньше нашего индекса. А затем сверяем получившееся число с индексом. Если они равны, то индекс - степень двойки.

Тут еще несколько способов с объяснениями.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 14.05.2013, 08:56   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

кстати, в коде на C есть ошибка
элемент с индексом 1 не будет напечатан.
т.к isPowerOfTwo ( 1 ) вернёт (ошибочно) false

нужно иницилизировать переменную tmpValue единицей:
Код:
bool isPowerOfTwo (int value)
{
    int tmpValue = 1;
    while (tmpValue < value)
        tmpValue *= 2;
    return (tmpValue == value);
}
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните часть программы aleko05 Помощь студентам 3 23.10.2012 22:20
объясните содержание программы lexa1493 Помощь студентам 0 31.01.2012 10:26
Объясните код программы vadym.miller Общие вопросы C/C++ 3 12.11.2011 16:27
Объясните код программы С++ PAREN_DEFO C++ Builder 2 21.03.2011 13:54