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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2009, 15:21   #1
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
Вопрос Две програмы.С++. Одномерные масивы

1). Сформировать масив с "n" елементов с помощью генератора радомных чисел (n вводиться пользователем с клавиатуры и будет обозначать количество елементов в масиве). Нужно вывести этот масив. Потом нужно зсунуть цыклически этот масив на М елементов влево. (M вводится пользователем)
2). Сформировать масив с "n" елементов с помощью генератора радомных чисел (n вводиться пользователем с клавиатуры и будет обозначать количество елементов в масиве). Потом нужно отсортировать методом простого обмена.

вот набросок для создания рандомного масива и его вывода
Код:
#include <cstdlib>
#include <iostream>
#include<ctime>
#include<conio.h>

using namespace std;

int main(int argc, char *argv[])
{
    int mas[100];
    int n;
    cout << "Enter n = ";
    cin >> n;

srand(time(NULL));

cout<<"massiv\n ";
for(int i=0;i<n;i++)
{
   mas[i]=rand()%100-50;
   cout << mas[i] << " ";
}
Если помогла нажмите на весы

Последний раз редактировалось Olya90; 28.03.2009 в 15:30.
Olya90 вне форума Ответить с цитированием
Старый 28.03.2009, 15:57   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот вам код на сдвиг влево:
Код:
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;

int main()
{
int mas[100];
int M,n;
int i,j,l,tmp;
cout << "Enter n = ";
cin >> n;

srand(time(NULL));

cout<<"massiv\n ";
for(i=0;i<n;i++)
{
   mas[i]=rand()%100-50;
   cout << mas[i] << " ";
}
cout<<endl<<endl;
cout<<"Enter M: ";
cin>>M;

if(M>=n) M %= n;
tmp = mas[0];
for(l=0,j=0;l<n;l++)
   {
    if(l<n-1)
     {
     if(j+M<n)
      {
       mas[j] = mas[j+M];
       j = j + M;
      }
     else
      {
       mas[j] = mas[j+M-n];
       j = j+M-n;
      }
    } //if
    else
     mas[j] = tmp;
   } //for j
//=-===========
for(i=0;i<n;i++)
 cout<<mas[i]<<" ";

getch();
return 0;
}
А сортировку сами сделайте. Это элементарно.
Алгоритм можете на алголисте или википедии посмотреть. Там и исходники есть.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.03.2009, 15:58   #3
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

Спасибо огромное!! С сортировкой разобрался !!!
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 28.03.2009, 16:21   #4
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

Извиняюсь заранее... но разве в программе на сдиг влево должно быть так? Например :

Enter n = 4
massiv
-36 5 -47 -32

Enter M: 2
-47 5 -36 -32


Я думала что должно вывести такой ответ: -47 -32 а потом должно отобразить два рандомные елемента(числа). Может я ошибаюсь, то не могли бы вы разьяснить.
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 28.03.2009, 16:29   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Olya90, везде, где я видел подобные задачи, подразумевался циклический сдвиг массива. Что я и написал.
Если нужно так, как вы указали, то все проще:

Код:
#include <iostream>
#include <time.h>
#include <conio.h>

using namespace std;

int main()
{
int mas[100];
int M,n;
int i;
cout << "Enter n = ";
cin >> n;

srand(time(NULL));

cout<<"massiv\n ";
for(i=0;i<n;i++)
{
   mas[i]=rand()%100-50;
   cout << mas[i] << " ";
}
cout<<endl<<endl;
cout<<"Enter M: ";
cin>>M;

//-------------
for(i=0;i<n;i++)
 if(i+M>=n) mas[i] = rand()%100-50;
 else mas[i] = mas[i+M];

for(i=0;i<n;i++)
 cout<<mas[i]<<" ";

getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.04.2009, 19:05   #6
Alex1991
Форумчанин
 
Аватар для Alex1991
 
Регистрация: 18.10.2008
Сообщений: 166
По умолчанию

Посмотрел програму которую вы предложили, впринципе работает, но есть одно но.
Например если ввести n=4
massiv
24 10 -17 11

Enter M: 2
-17 10 24 11

Разве ответ правильный?? Разве не так должно быть: -17 11 24 10
Alex1991 вне форума Ответить с цитированием
Старый 11.04.2009, 19:27   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Alex1991, действительно, странно..
Если не ошибаюсь, то неверно работает, если n делится на k.

В общем, вот рабочий вариант через дополнительный массив. Хоть мне он и не нравится.

Код:
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;

int main()
{
int mas[100],tmp[100];
int i,n,k;
srand(time(NULL));

cout<<"N = ";
cin>>n;
cout<<"massiv:\n";
for(i=0;i<n;i++)
 {
  mas[i] = rand()%100;
  cout.width(4);
  cout<<mas[i];
 }
cout<<endl;
cout<<"Enter k: ";
cin>>k;

if(k>=n) k%=n;

for(i=0;i<n-k+1;i++)
 {
  tmp[i] = mas[i];
  mas[i] = mas[i+k];
 }

for(i=0;i<n-k+1;i++)
 mas[n-k+i] = tmp[i];

//---------
for(i=0;i<n;i++)
 {
  cout.width(4);
  cout<<mas[i];
 }

getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 11.04.2009 в 20:05.
Sazary вне форума Ответить с цитированием
Старый 11.04.2009, 19:52   #8
Alex1991
Форумчанин
 
Аватар для Alex1991
 
Регистрация: 18.10.2008
Сообщений: 166
По умолчанию

Здесь также есть проблемка.... Попробуйте ввеcти n=5 k=3
Alex1991 вне форума Ответить с цитированием
Старый 11.04.2009, 20:04   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Alex1991
Здесь также есть проблемка.... Попробуйте ввеcти n=5 k=3
Да, спасибо.
Нужно исправить условие в циклах на
Код:
i<n-k+1
Подправил в листинге.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.04.2009, 20:16   #10
Alex1991
Форумчанин
 
Аватар для Alex1991
 
Регистрация: 18.10.2008
Сообщений: 166
По умолчанию

А я только что додумался как сделать попроще ))
Код:
#include <cstdlib>
#include <iostream>
#include<ctime>

using namespace std;

int main(int argc, char *argv[])
{
    
    const int MAX_SIZE=100;
    int a[MAX_SIZE];
    int n,k,r;
    cout<<"\nEnter size array<"<<MAX_SIZE<<":";
    cin >> n;

srand(time(NULL));

cout<<"massiv\n ";
for(int i=0;i<n;i++)
{
   a[i]=rand()%100-50;
   cout<<a[i]<<" ";
}

cout<<"\nK=";
cin>>k;

for(int t=0;t<k;t++)
 {
  r=a[0];
  for(int i=0;i<n-1;i++)
  a[i]=a[i+1];
  a[n-1]=r;
 }
    
    for(int i=0;i<n;i++)
  {
    cout<<a[i]<<" ";
  }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Alex1991 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Paskal, цыклы, масивы. Maks:// Помощь студентам 8 10.02.2009 19:03
Паскаль, матрицы и масивы Aller Помощь студентам 1 23.11.2008 18:53
Одномерные масивы на i8080 Ase Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 04.11.2008 08:25
Pascal масивы Devikss Помощь студентам 2 19.06.2008 17:20
динамические масивы mrandrey Общие вопросы Delphi 14 11.04.2007 15:14