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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2007, 18:33   #1
Fimogen
 
Регистрация: 22.10.2007
Сообщений: 5
По умолчанию Циклическо сдвинуть элементы массива на K позиций влево, тоже сделать, испульзуя динамические массивы

Добрый вечер.
Помогите, пожалуйста, решить задачку...
Нужно в C++(Билдер 6(через консоль)) написать небольшую програмку, используя одномерные массивы. Нужно циклическо сдвинуть элементы массива на K позиций влево. И тоже самое нужно сделать, испульзуя динамические массивы...Объясните мне как это делать? И ещё, посоветуйте какую-нибудь хорошую книга по С++ для начинающих, где всё подробно разрабранно для тех кто в бронепоезде)...мне посоветовали Дейтла...Какое ваше мненин об этой книге?) Заранее спасибо!
Fimogen вне форума Ответить с цитированием
Старый 31.10.2007, 15:40   #2
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Привет!
Я немного не понял, все элементы массива сдвигать на K позиций?

Код:
                                        //допустим мы создадим массив
unsigned char size = 255;
int *mas = new int[size];
Так вот, если мы обратимся к элементу mas[size] - вылезем за границы...
Тоесть, уточни задачу, что перемещать....
мы не можем последний элемент сдвинуть туда...где не выделена память под массив. Это приведет к ошибке времени исполнения.
Бог сделал людей разными, а генерал Кольт уравнял шансы
studenth вне форума Ответить с цитированием
Старый 31.10.2007, 18:53   #3
Fimogen
 
Регистрация: 22.10.2007
Сообщений: 5
По умолчанию

Ах да, сори забыл написать.) Нам дан целочисленный одномерный массив из n элементов (1<=n<=100). И нужно выполнить заданную операцию над массивом, т.е. циклически сдивинуть элементы массива на k позиций влево. И тоже самое нужно сделать использую динамический массив. Помогите и объясните как это сделать, пожалуйста, ибо я пока в этом чайник....
Fimogen вне форума Ответить с цитированием
Старый 01.11.2007, 13:06   #4
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

я не совсем понял "сдвинуть на k позиций влево"
если мы первый элемент массива, с индексом [0] сдвинем в лево...где он должен оказаться?
Бог сделал людей разными, а генерал Кольт уравнял шансы
studenth вне форума Ответить с цитированием
Старый 01.11.2007, 13:34   #5
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Циклически - это по кругу. Если сдвигаем на 1 позицию влево, то 1 становиться 100, 100-99, 99-98,...,2-1
_Dmitry вне форума Ответить с цитированием
Старый 01.11.2007, 17:42   #6
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>
#include "stdlib.h"
#define n 100 //размер массива
#define k 4   //величина сдвига

main()
{ int M[n], M1[n];  //объявляем массивы
//заполняем массив M случайными числами
  randomize;
  for (int i=1; i<=n; i++) M[i]=random(1000);
//копируем цифры в новый массив M1 со сдвигом
  for (int i=1; i<=n; i++)
  { int j=i-k;
    if (j<1) j=j+n;
    M1[j]=M[i];
  }
//печатаем массивы  
  for (int i=1; i<=n; i++) printf("%4i",M[i]);
  printf("\n");
  for (int i=1; i<=n; i++) printf("%4i",M1[i]);
  getch();
}
Книги посмотри здесь http://www.libray.narod.ru/rapid/katalog_cc.htm

Последний раз редактировалось _Dmitry; 01.11.2007 в 18:09.
_Dmitry вне форума Ответить с цитированием
Старый 01.11.2007, 20:40   #7
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

При использовании динамических массивов, замени
Код:
int M[n], M1[n];
на
Код:
int *M = new int[n];
int *M1 = new int[n];
_Dmitry вне форума Ответить с цитированием
Старый 02.11.2007, 00:33   #8
Diller
Пользователь
 
Аватар для Diller
 
Регистрация: 21.06.2007
Сообщений: 55
По умолчанию

динамические массивы и ил создание.. см тему в поиске динамический массив

www.nnm.ru
۩۞۩___Смысл заключается,_______________۩۞۩
۩۞۩___Лишь в величине вашего разума____.۩۞۩
۩۞۩__♣™_Diller_™♣__۩۞۩
Diller вне форума Ответить с цитированием
Старый 02.11.2007, 11:01   #9
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

в stl есть хорошая функция rotate

int numbers[6] = { 0, 1, 2, 3, 4, 5 };

int main ()
{
rotate (numbers, numbers + 3, numbers + 6);
for (int i = 0; i < 6; i++)
cout << numbers[i] << ' ';
cout << endl;
return 0;
}

так что учите, люди, stl

Последний раз редактировалось merax; 02.11.2007 в 13:20.
Alek86 вне форума Ответить с цитированием
Старый 02.11.2007, 19:28   #10
Fimogen
 
Регистрация: 22.10.2007
Сообщений: 5
По умолчанию

ссылкой на книжки очень выручили) 2 _Dmitry А не мог ты написать в С++, ибо я чайник и не смогу из С в С++ пределать...

Последний раз редактировалось Fimogen; 02.11.2007 в 19:36.
Fimogen вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повторяющиеся элементы массива Stanislav Общие вопросы Delphi 10 23.05.2008 12:31
Элементы массива и старшие цифры logistics Помощь студентам 4 22.04.2008 00:12
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44
Как удалять элементы массива в Паскале? Антонова Анна Помощь студентам 2 08.12.2007 17:01