Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
КИИИ
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 22
#1

Написать функцию, генерирующую массив из N случайных чисел, принадлежащих указанному диапазону - C++

02.12.2012, 18:08. Просмотров 826. Ответов 19
Метки нет (Все метки)

1) Написать функцию, генерирующую массив из N случайных чисел, принадлежащих указанному диапазону [a,b]. Величины N, a и b задаются с клавиатуры. Максимальное значение N=1000.
2) Написать функцию для вывода массива на экран.
3) Написать функцию для поиска номера элемента, подлежащего удалению (Минимальный по абсолютному значению элемент).

C++
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
#include <iostream>  
using namespace std;
int main()                                 
 {
    int n,a,b,i,min;
    int A[1000];
    cout <<"Vvedite n<1000: "; cin>>n;
    cout <<"Vvedite a= "; cin>>a;
    cout <<"Vvedite b= "; cin>>b;
 
    for (i=0;i<n;i++)
    {
    A[i] = a+rand()%(b-a)+1;
    cout <<A[i]<<" ";
    }
    cout<<endl;
    min=A[0];
    {
    for(i=1; i<n; i++);
    if A[i]<min then
    min=i;
    }
    cout<<min<<endl;
    system("pause");                   
    return 0;
}
выдаёт error C2061: синтаксическая ошибка: идентификатор "A"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 18:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Написать функцию, генерирующую массив из N случайных чисел, принадлежащих указанному диапазону (C++):

Сгенерировать массив из N случайных чисел, принадлежащих указанному диапазону
1) Написать функцию, генерирующую массив из N случайных чисел, принадлежащих...

Вывести 5 случайных чисел, принадлежащих диапазону [a−2,b∗2)
На вход программе подается два целых числа a и b (a&lt;b). Вывести на экран пять...

Написать функцию, которая из заданного массива удаляет блок элементов по указанному диапазону индексов
4. Написать функцию, которая из заданного динамического массива удаляет блок...

Напишете функцию, генерирующую три случайных числа
Напишете функцию, генерирующую три случайных числа. Первые два числа – это...

Сгенерировать массив целых случайных чисели написать функцию SORT
Сгенерировать массив целых случайных чисел. Диапазон значений и количество...

Написать функцию, проверяющую передаваемые параметры и генерирующую в случае надобности подходящее исключение
Функция, реализуемая в задании, обязана выполнять проверку передаваемых...

19
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.12.2012, 18:17 #2
C++
1
 if A[i]<min then
Такое в паскале есть, но не в c/c++. Правильно так:
C++
1
if (A[i]<min)
0
КИИИ
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 22
02.12.2012, 18:27  [ТС] #3
Исправила, вот на это
C++
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
#include <iostream>  
using namespace std;
int main()                                 
 {
    int n,a,b,i,min;
    int A[1000];
    setlocale(LC_ALL, "Russian");
    cout <<"Введите n<1000: "; cin>>n;
    cout <<"Введите a= "; cin>>a;
    cout <<"Введите b= "; cin>>b;
 
    for (i=0;i<n;i++)
    {
    A[i] = a+rand()%(b-a)+1;
    cout <<A[i]<<" ";
    }
    cout<<endl;
    min=A[0];
    {
    for(i=1; i<n; i++);
    if (A[i]<min) then
    min=i;
    }
    cout<<A[min]<<endl;
    system("pause");                   
    return 0;
}
Всё-равно 2 ошибки вылезают:
cpp(22) : error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "min"
cpp(22) : error C2065: then: необъявленный идентификатор
Написать функцию, генерирующую массив из N случайных чисел, принадлежащих указанному диапазону
Не высвечивается минимальный элемент...
0
Schizorb
510 / 462 / 82
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
Завершенные тесты: 1
02.12.2012, 18:52 #4
Ну беда...

Уж определитесь в переменной min вы храните индекс минимального элемента или его значение.

C++
1
2
3
4
5
6
7
min = A[0];
for(i = 1; i < n; i++) // точка с запятой тут не нужна
    if (A[i] < min) // then - вообще из другого языка
        min = A[i];
  
    
cout << "\nmin=" << min << endl;
Добавлено через 4 минуты
Число у вас тоже не из того диапазона генерируется, правильнее будет так:

C++
1
A[i] = a + rand() % (b - a + 1);
И перед этим не забыть:
C++
1
srand(static_cast<unsigned int>(time(0)));
Чтобы числа разные генерировались от запуска к запуску.
1
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.12.2012, 19:03 #5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
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
#include <iostream>  
#include <cstdlib>
using namespace std;
 
int m(int *A, const int n)
{
      int min=0,i; 
      for(i=0; i<n; i++)
     if (A[i]<abs(A[min]))
      min=i;
     return min;
}
 
int main()                                 
 {
    int n,a,b,i,min;
    int A[1000];
    cout <<"Vvedite n<1000: "; cin>>n;
    cout <<"Vvedite a= "; cin>>a;
    cout <<"Vvedite b= "; cin>>b;
 
    for (i=0;i<n;i++)
    {
     A[i] = a+rand()%(b-a)+1;
     cout <<A[i]<<" ";
    }
    cout<<endl;
    
    cout<<A[m(A,n)]<<endl;
    system("pause");                   
    return 0;
}
1
КИИИ
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 22
02.12.2012, 19:04  [ТС] #6
Ой точно) Спасибо) Просто в задании написано-найти номер минимального элемента. Значение минимального элемента он почему то выводит каждый раз min=-858993460, хотя a и b я ввожу разные....
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.12.2012, 19:05 #7
В 21 строчке ; после цикла. Ничем не примечательно, однако компилятор это съедает и цикл проходит сам собой, не обращая внимания на то, что ниже.
0
КИИИ
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 22
02.12.2012, 19:17  [ТС] #8
Помогите пожалуйста ещё вот с этим:
4) Написать функцию для удаления элемента с указанным номером из массива.
5) Написать функцию для добавления указанного элемента в массив на указанную позицию (Максимум – вставить перед первым встреченным отрицательным элементом).
Это продолжение задания. Или просто объясните как можно удалить элемент, а потом вставить =)
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.12.2012, 19:44 #9
Вставка элементов в обычный массив возможна только посредством сдвига всех последующих ему элементов вправо. Для удаления, соответственно, сдвинуть на позицию влево все идущие после удаляемого.

Добавлено через 12 минут
C++
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
#include <iostream>  
#include <cstdlib>
using namespace std;
 
int main()                                 
 {
    int n = 10;
     int a[n+10];
    for (int i=0; i<n; i++)
     cout<<(a[i]=i)<<" "; //âûâîä Г*Г* ГЅГЄГ°Г*Г*
    cout<<endl;
    int k=33; // ГўГ±ГІГ*âëÿåìûé ýëåìåГ*ГІ
    
     for (int i=0; i<n; i++)
      if(i==5) //ГўГ±ГІГ*ГўГЁГ¬, Г*Г*ïðèìåð, Гў ГЇГїГІГіГѕ ïîçèöèþ
        {
                    for(int j=n; j>i-1; j--) //ñäâèãГ*ГҐГ¬ ГўГЇГ°Г*ГўГ® Г*Г* 1 ïîçèöèþ, ÷òîáû îñâîáîäèòü ìåñòî äëÿ k=33
                      a[j+1]=a[j];
                    a[i]=k; //ГўГ±ГІГ*âëÿåì k
                    n++; //òåïåðü ýëåìåГ*òîâ Гў Г¬Г*Г±Г±ГЁГўГҐ Г±ГІГ*ëî Г*Г* 1 áîëüøå     
        }
     
     for (int i=0; i<n; i++)
     cout<<a[i]<<" "; // âûâîäèì Г*îâûé Г¬Г*Г±Г±ГЁГў Г*Г* ГЅГЄГ°Г*Г*
       
    system("pause");                   
    return 0;
}
1
КИИИ
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 22
02.12.2012, 22:01  [ТС] #10
Помогите, почему-то максимальный элемент вставляется перед последним отрицательным элементом, а должен перед первым((
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
max=0;
    for (i=0; i<n; i++)
    {
        if (A[i]>A[max])
            max=i;
    }
    for (i=0;i<n; i++)
        if (A[i]<0)
            otr=i;
    for (i=0; i<n;i++)
        if (i==otr)
        {
            for (int j=n; j>i-1; j--)
                A[j+1]=A[j];
            A[i]=A[max];
            n++;
        }
        for (int i=0; i<n; i++)
     cout<<A[i]<<" ";
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.12.2012, 22:10 #11
КИИИ, не проверял, но думаю, что надо так: 10 сменить на:
C++
1
2
3
4
{
  otr=i;
  break;
}
0
КИИИ
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 22
02.12.2012, 22:33  [ТС] #12
Чёт всё-равно как-то странно работает, то как надо, то что-то лишнее удаляет из массива... И всё-равно ставит MAX перед последним отрицательным элементом
C++
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>  
#include <cstdlib>
using namespace std;
 
int m(int *A, const int n)
{
      int min=0,i; 
      for(i=0; i<n; i++)
     if (abs(A[i])<abs(A[min]))
      min=i;
     return min;
}
 
int main()                                 
 {
    int n,a,b,i,otr,max;
    int A[1000];
    setlocale(LC_ALL, "Russian");
    cout <<"Введите n<1000: "; cin>>n;
    cout <<"Введите a= "; cin>>a;
    cout <<"Введите b= "; cin>>b;
 
    for (i=0;i<n;i++)
    {
     A[i] = a + rand() % (b - a + 1);
 
     cout <<A[i]<<" ";
    }
    cout<<endl;
for (i=0; i<n; i++)
        if(i==m(A,n))
        {
            for (int j=m(A,n); j<n; j++)
                A[j]=A[j+1];
            
            n--;
        }
        for (i=0; i<n; i++)
        {
        cout<<A[i]<<" ";
        }
    cout<<endl;
    max=0;
    for (i=0; i<n; i++)
    {
        if (A[i]>A[max])
            max=i;
    }
    for (i=0;i<n; i++)
        if (A[i]<0)
        otr=i;
        break;
    
    for (i=0; i<n;i++)
        if (i==otr)
        {
            for (int j=n; j>i-1; j--)
                A[j+1]=A[j];
            A[i]=A[max];
            n++;
        }
        for (int i=0; i<n; i++)
     cout<<A[i]<<" ";
    system("pause");                   
    return 0;
}
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.12.2012, 22:43 #13
КИИИ, ну, я ж еще скобочки подрисовал, их тоже надо =)
1
КИИИ
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 22
02.12.2012, 22:53  [ТС] #14
Скобочки не помогли
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.12.2012, 23:57 #15
Так?
C++
1
2
3
4
5
6
7
8
 if (i==otr)
        {
            int m = A[max];
                for (int j=n; j>i-1; j--)
                A[j+1]=A[j];
            A[i]=m;
            n++;
        }
0
КИИИ
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 22
03.12.2012, 00:14  [ТС] #16
Нет((( Всё тоже самое выходит(((((
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
03.12.2012, 00:19 #17
Вроде по заданию все корректно.
0
Миниатюры
Написать функцию, генерирующую массив из N случайных чисел, принадлежащих указанному диапазону  
КИИИ
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 22
03.12.2012, 00:52  [ТС] #18
Нуу почти. В задании написано, что нужно удалить минимальный элемент. А тут удалено 2: -1 и 2. -1-это min, а вот почему 2 удалилась.... Максимальный элемент правильно вставлен =)
Странно я щас запустила, поставила такие же значения как у Вас и вот что получилось:
Написать функцию, генерирующую массив из N случайных чисел, принадлежащих указанному диапазону
Что-то я с кодом по ходу нахимичила
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
03.12.2012, 01:11 #19
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Подправил.
C++
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>  
#include <cstdlib>
#include <ctime>
using namespace std;
 
int m(int *A, const int n)
{
      int min=0,i; 
      for(i=0; i<n; i++)
     if (abs(A[i])<abs(A[min]))
      min=i;
     return min;
}
 
int main()                                 
 {
    srand(time(NULL));
     int n,a,b,i,otr,max;
    int A[1000];
    setlocale(LC_ALL, "Russian");
    cout <<"Ââåäèòå n<1000: "; cin>>n;
    cout <<"Ââåäèòå a= "; cin>>a;
    cout <<"Ââåäèòå b= "; cin>>b;
 
    for (i=0;i<n;i++)
    {
     A[i] = a + rand() % (b - a + 1);
 
     cout <<A[i]<<" ";
    }
    cout<<endl;
    int mm = m(A,n);
for (i=0; i<n; i++)
        if(i==mm)
        {
            for (int j=m(A,n); j<n; j++)
                A[j]=A[j+1];
            
            n--;
        }
        for (i=0; i<n; i++)
        {
        cout<<A[i]<<" ";
        }
    cout<<endl;
    max=0;
    for (i=0; i<n; i++)
    {
        if (A[i]>A[max])
            max=i;
    }
    for (i=0;i<n; i++)
        if (A[i]<0)
        {
          otr=i;
        break;
          }
    for (i=0; i<n;i++)
        if (i==otr)
        {
            int m = A[max];
                for (int j=n; j>i-1; j--)
                A[j+1]=A[j];
            A[i]=m;
            n++;
        }
        for (int i=0; i<n; i++)
     cout<<A[i]<<" ";
    system("pause");                   
    return 0;
}
1
КИИИ
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 22
03.12.2012, 01:18  [ТС] #20
Урааа!!! Спасибо Вам ОГРОООМНОЕ!!! Вы потратили на меня много времени =) 1 лабораторная из 10 готова

Пожалуйста)
(BumerangSP)
0
03.12.2012, 01:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2012, 01:18
Привет! Вот еще темы с решениями:

В функцию передается массив случайных чисел в диапазоне от - 20 до + 20. Где ошибка?
#include &lt;iostream&gt; using namespace std; //3. В функцию передается массив...

Бинарные файлы. Написать функцию, которая записывает в бинарный файл N случайных вещественных чисел в указанном диапазоне
Добрый день! Подскажите пожалуйста! Генерирую рандомное кол-во вещественных...

Написать программу, создающую массив из 10 случайных целых чисел из отрезка[-50;50]
Написать программу, создающую массив из 10 случайных целых чисел из отрезка....

Написать функцию, добавляющую столбец двухмерного массива по указанному номеру
тема: Многомерные двухмерные массивы. Написать функцию, добавляющую столбец...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru