Форум программистов, компьютерный форум CyberForum.ru

Полоска - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Функция округления чисел http://www.cyberforum.ru/cpp-beginners/thread848232.html
Здравствуйте, подскажите пожалуйста. Написала функцию округления цифр void RoundingFunction(double RoundingVariable, int& ResultVariable) { double IntegerPart=0; ResultVariable=0; if (modf(abs(RoundingVariable),&IntegerPart)<=0.5) { if (RoundingVariable>0) ResultVariable=floor(RoundingVariable);
C++ Не вмещается число Начал изучать с++ по учебнику, и вот есть такая практическая задачка, нужно первый пример переделать с использованием array вместо масива, вместо long long использовать long double, и расчитать не 16 значений а 100. 1 код это то с чего надо переделать, а 2-й это то что я максимум смог сделать. В итоге происходит переполнение и не представляю что можно тут сделать. // formore.cpp -- more looping... http://www.cyberforum.ru/cpp-beginners/thread848190.html
C++ Удаление слова из текста
Даны текстовый файл и слово. Напечатать те строки файла, которые содержат данное слово без этого слова. Написал прогу которая удаляет из строки лишь первое вхождение слова. Как сделать, чтобы она удаляла слово, если оно в строке встречается несколько раз. #include <vector> #include <stdio.h> #include <string.h> #include <iostream> using namespace std; int main() { char slovo;
группы символов, разделенные пробелами C++
Помогите написать программу ничего не получается уже сижу 2 дня и не в какую. За ранее спасибо)) группы символов, разделенные пробелами и не содержащие пробелов внутри себя, будем называть словами. выравнивание строки заключается в том, что между ее отдельными словами дополнительно вносятся пробелы так, чтобы длина строки стала равной заданной длине(предполагаетя, что требуемая длина не меньше...
C++ Создать класс Hexadec1, который будет содержать число в 16-ричной системе http://www.cyberforum.ru/cpp-beginners/thread848179.html
1)разработать класс, содержащий два члена (назовем их first, second), и следующие методы: – ввод с клавиатуры Read; – вывод на экран Display; – метод, указанный в задании. Поле first – целое число, целая часть числа, записанного в двоичной системе счисления; поле second – положительное целое число, дробная часть числа, записанного в двоичной системе счисления. Реализовать метод add2( ) –...
C++ Задача По результатам опроса прошлого года известен список 10 политических деятелей в порядке убывания их популярности. Проведен новый опрос. Каждый из N журналистов (N - заданное число) назвал три различные фамилии из этого списка. Требуется получить новый список в порядке убывания популярности политических деятелей и показать место, которое занимал каждый деятель в предыдущем опросе. Предусмотреть... подробнее

Показать сообщение отдельно
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,508
25.04.2013, 14:19     Полоска
Есть задание, которое я не могу понять:
Задана полоска длиной 2^k клеток и шириной в одну клетку. Полоску сгибают пополам так, чтобы правая половинка оказалась под левой. Сгибание продолжают до тех пор, пока сверху находится больше одной клетки. Необходимо пронумеровать клетки таким образом, чтобы после окончания сгибания полосы номера клеток в получившейся колонке были расположены в порядке 1,2,3,4,...,2^k.

Это какая-то олимпиадная задачка, я нашёл в сети решение на паскале:


Будем моделировать сложение полоски, затем пронумеруем получившуюся колонку клеток числами от 1 до 2n, после чего распечатаем числа, приписанные первой, второй, ..., 2^n-ой клетке исходной полоски.
Сначала создаем двусвязный список, состоящий из 2^k элементов. Поле next будет указывать на элемент находящийся под данным, а поле last - на элемент находящийся над данным. Для верхнего элемента last=0, а для нижнего next=n+1, где n-общее число элементов. Вначале длина верхней полоски равняется n элементов, после первого сгибания их она станет n/2, после второго - n/4, и т.д. Пусть в данный момент длина верхней полоски есть cn элементов. Значит нам необходимо cn/2 правых элементов опустить под cn/2 левых. Для этого запустим цикл, который будет менять i от 1 до cn/2 и на каждом шаге помещать (cn-i+1)-ю колонку элементов под i-ю, при этом порядок элементов в (cn-i+1)-ой колонке меняется на противоположный. После каждого сгибания cn уменьшается вдвое. Так продолжаем до тех пор пока cn>1.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{$A-,B-,D-,E+,F-,I-,L-,N-,O-,R-,S-,V-}
{$M 65520,0,655360}
uses crt;
const
maxk = 13; {Максимальное значение для k}
type
input = record
last,next,new : word;
end;
var
k,i,j,n,cn,half : word;
m : array[1..1 shl maxk] of input;
Procedure concat(a,b : word);
var i,j,nj : word;
begin
i:=a;while m[i].next<>n+1 do i:=m[i].next;
j:=b; while m[j].next<>n+1 do j:=m[j].next;
while j<>0 do
begin
nj:=m[j].last; m[i].next:=j; m[j].last:=i; i:=j; j:=nj;
end;
m[i].next:=n+1;
end;
begin
Write('Enter k...');readln(k);
n:=1 shl k; {Определение длины полоски}
for i:=1 to n do{Начальные значения}
with m[i] do
begin
last:=0;
next:=n+1;
new:=0;
end;
cn:=n;
while cn>1 do {Сгибание полоски}
begin
half:=cn div 2;
for i:=1 to half do concat(i,cn-i+1);
cn:=half;
end;
j:=1;
for i:=1 to n do {Нумерация клеток}
begin
m[j].new:=i; j:=m[j].next;
end;
for i:=1 to n do write(m[i].new:5);
writeln;
end.
Но блин, я всё равно ничего не понял Чего хотят-то, ну есть полоска, которую я допустим представлю в виде массива, ну пронумерую я её в начале, а чего выводить и чего считать мне не ясно Помогите понять объяснив словестно или подкиньте пожалуйста кусок кода с++ если вы владете паскалем.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru