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

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

02.12.2012, 18:08. Просмотров 1565. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2012, 18:08
Ответы с готовыми решениями:

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

Написать программу, генерирующую массив из не более, чем 1000 случайных целых чисел
Написать программу, генерирующую массив из не более, чем 1000 случайных целых чисел (количество...

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

Написать программу, генерирующую последовательность из 50 случайных чисел в диапазоне -20...+20
Напишите программу, которая бы генерировала и отображала на экране последовательность из 50...

19
4293 / 1415 / 463
Регистрация: 16.12.2010
Сообщений: 2,938
Записей в блоге: 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
511 / 463 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 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
4293 / 1415 / 463
Регистрация: 16.12.2010
Сообщений: 2,938
Записей в блоге: 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
4293 / 1415 / 463
Регистрация: 16.12.2010
Сообщений: 2,938
Записей в блоге: 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
4293 / 1415 / 463
Регистрация: 16.12.2010
Сообщений: 2,938
Записей в блоге: 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
4293 / 1415 / 463
Регистрация: 16.12.2010
Сообщений: 2,938
Записей в блоге: 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
4293 / 1415 / 463
Регистрация: 16.12.2010
Сообщений: 2,938
Записей в блоге: 3
02.12.2012, 22:43 13
КИИИ, ну, я ж еще скобочки подрисовал, их тоже надо =)
1
0 / 0 / 0
Регистрация: 07.06.2012
Сообщений: 22
02.12.2012, 22:53  [ТС] 14
Скобочки не помогли
0
4293 / 1415 / 463
Регистрация: 16.12.2010
Сообщений: 2,938
Записей в блоге: 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
4293 / 1415 / 463
Регистрация: 16.12.2010
Сообщений: 2,938
Записей в блоге: 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
4293 / 1415 / 463
Регистрация: 16.12.2010
Сообщений: 2,938
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2012, 01:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Сформировать двумерный массив Z(10,3) из случайных чисел, принадлежащих отрезку [-2;15]
Сформировать двумерный массив Z(10,3) из случайных чисел, принадлежащих отрезку.Получить и вывести...

Составить программу, которая формирует массив из 7 случайных целых чисел, принадлежащих промежутку [-14;9], и вычисляет произведение нечетных чисел.
Составить программу, которая формирует массив из 7 случайных целых чисел, принадлежащих...

Сформировать массив из 14 случайных целых чисел, принадлежащих заданному промежутку
Задача: составить программу, которая формирует массив из 14 случайных целых чисел, принадлежащих...


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

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

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