Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 01.10.2020
Сообщений: 23
1

Вывести индексы всех положительных чисел. Умножить отрицательные элементы массива на 2. Найдите ошибки в коде

03.02.2021, 16:04. Показов 2552. Ответов 6

Author24 — интернет-сервис помощи студентам
Программа должна предоставить пользователю возможность
выбора одного из двух способов заполнения массива: с клавиатуры
или случайными числами из отрезка [A, B], границы которого задаёт
пользователь. Заполнение массива каждым способом, вывод массива
на экран и решение задач согласно варианту из списка задач
для самостоятельного решения необходимо оформить в виде
отдельных подпрограмм. Массивы и их длины передавать функциям
с помощью списка аргументов, глобальные данные не использовать.
Программа должна запросить у пользователя все необходимые
исходные данные, вывести массив и результат решения задачи
на экран.
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <locale.h>
#include <conio.h>
#include <stdio.h>
#include <ctime>
 
#define N 100
 
 
int input_key(int* a, int maxn)
{
    int n;
    do
    {
        printf_s("Vvedite razmer massiva :");
        scanf_s("%d", &n);
        printf_s("Massiv:\n");
    }while (n >= maxn || n<1);
    
    for (int i = 0; i < n; i++)
    {
        printf_s("a[%d]= ", i);
        scanf_s("%d", &a[i]);
    }
    return n;
}
 
void print_arr(int* a, int n)
{
    for (int i = 0; i < n; i++)
    {
        printf_s("%d", a[i]);
    }
}
 
void random_uh(int* a, int n, int c, int b)
{
 
    srand(time(NULL));
    int c, b;
    
    for (int i = 0; i < n; i++)
    {
        a[i] = rand() % (b - c + 1) + c;
    }
    
 
}
 
 
int sravn_arr(int* a, int n)
{
    for (int i = 0; i < n; i++) {
        if (a[i] > 0) {
            return a[i];
 
        }
 
    }
}
 
int main()
{
    
    int a[N];
    int n = 0;
    int ch;
    printf_s("Input massiv: \n 1-keyboard, 2-random ");
    scanf_s("%d", &ch);
 
 
    do
    {
        printf_s("Vvedite c ");
        scanf_s("%d", &c);
        printf_s("Vvedite b ");
        scanf_s("%d", &b);
 
 
    } while (c > b);
 
 
    switch (ch)
    {
    case 1:
        n=input_key(a, N);
        break;
    case 2:
        random_uh(a, n);
        break;
    }
    printf_s("Initial array:\n");
    print_arr(a, n);
 
    PrintPositive(a, n);
 
    ChangeArrayVar7(a, n);
    printf_s("New array:\n");
    print_arr(a, n);
 
    //printf_s("\nRezylitat ymnojeni = %d\n", sravn_arr(a, n));
 
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2021, 16:04
Ответы с готовыми решениями:

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

Распечатайте отрицательные элементы массива и найдите сумму положительных элементов
Дан массив X(x1,x2,...,x10). Распечатайте отрицательные элементы массива и найдите сумму...

Вывести начальные индексы всех непрерывных последовательностей неотрицательных чисел массива
Вывести начальные индексы всех непрерывных последовательностей неотрицательных чисел, длина которых...

отрицательные элементы массива увеличить на 17 и умножить на 4
Добрый вечер, мне нужно отрицательные элементы массива увеличить на 17 и умножить на 4, но...

6
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
03.02.2021, 16:56 2
Цитата Сообщение от Rony41 Посмотреть сообщение
Найдите ошибки в коде
Главная "ошибка" этого кода в том, что он не решает поставленную задачу.
0
из племени тумба-юбма
2467 / 1790 / 417
Регистрация: 29.11.2015
Сообщений: 8,690
Записей в блоге: 15
03.02.2021, 19:53 3
Лучший ответ Сообщение было отмечено Rony41 как решение

Решение

Лишнее не убирал, получилось много букв
Кликните здесь для просмотра всего текста
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 
#define N 100
 
void input_key(int* a, int n)
{
    for(int i=0; i<n; i++)
    {
//        printf_s("a[%d]= ", i);
        printf("a[%d]= ", i);
//        scanf_s("%d", &a[i]);
        scanf("%d", &a[i]);
    }
}
 
void print_arr(int* a, int n)
{
    for(int i=0; i<n; i++)
//        printf_s("%d", a[i]);
        printf("%4d", a[i]);
    printf("\n\n");
}
 
void random_uh(int* a, int n)
{
    int min, max;
    do
    {
//        printf_s("Vvedite c ");
        printf("Vvedite MIN: ");
//        scanf_s("%d", &c);
        scanf("%d", &min);
//        printf_s("Vvedite b ");
        printf("Vvedite MAX: ");
//        scanf_s("%d", &b);
        scanf("%d", &max);
    }
    while(min >= max);
    
    srand(time(NULL));
    for(int i=0; i<n; i++)
        a[i] = min + rand()%(max-min+1);
}
 
void sravn_arr(int* a, int n)
{
    printf("(+)#: ");
    for(int i=0; i<n; i++)
    {
        if(a[i] > 0) printf("[%d] ", i);
        if(a[i] < 0) a[i] *= 2;
    }
    printf("\n\n");
}
 
int main(void)
{
    int a[N], ch, n;
//    int n = 0;
//    int ch;
 
//    printf_s("Input massiv: \n 1-keyboard, 2-random ");
    printf("Input massiv (1-keyboard, 2-random): ");
//    scanf_s("%d", &ch);
    scanf("%d", &ch);
 
    do
    {
//        printf_s("Vvedite razmer massiva :");
        printf("Vvedite razmer massiva(2-%d): ", N);
//        scanf_s("%d", &n);
        scanf("%d", &n);
//        printf_s("Massiv:\n");
    }
    while(n>N || n<2);
 
    switch(ch)
    {
    case 1:
        input_key(a, n);
        break;
    case 2:
        random_uh(a, n);
        break;
    }
 
//    printf_s("Initial array:\n");
    printf("Initial array:\n");
    print_arr(a, n);
    sravn_arr(a, n);
//    PrintPositive(a, n);
//    ChangeArrayVar7(a, n);
//    printf_s("New array:\n");
    printf("New array:\n");
    print_arr(a, n);
 
    //printf_s("\nRezylitat ymnojeni = %d\n", sravn_arr(a, n));
}
0
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667
03.02.2021, 22:52 4
Цитата Сообщение от Rony41 Посмотреть сообщение
void random_uh
какой какой? =))
0
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667
03.02.2021, 22:53 5
upd
Изображения
 
0
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,225
04.02.2021, 07:17 6
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#define _CRT_SECURE_NO_WARNINGS     // <- только для MS Visual Studio
 
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
#define N 100
#define WINDOWS "russian"
#define LINUX "ru_RU.UTF-8"
#define swap(a, b) {int t = a; a = b; b = t;}
 
int  input_key (void);
void print_arr (int *, int);
void input_arr (int *, int, int, int);
void random_uh (int *, int, int, int);
void positives (int *, int);
void negatives (int *, int);
 
int main (void) {
    /* Инициируем окружение */
    int a[N];
    setlocale(LC_ALL, WINDOWS);
 
    /* Запрашиваем размер массива */
    int size = 0;
    while (size < 1 || size > N) {
        printf("Введите размер массива: ");
        size = input_key();
        puts("");
    }
 
    /* Запрашиваем границы диапазона */
    printf("Введите нижнюю границу диапазона: ");
    int c = input_key();
    printf("Введите верхнюю границу диапазона: ");
    int b = input_key();
    if (c > b) swap(c, b);
    puts("");
 
    /* Запрашиваем способ заполнения массива */
    int type = 0;
    while (type < 1 || type > 2) {
        printf("\nСпособ заполнения массива?\n");
        printf("1 - с клавиатуры,\n2 - случайными числами.\n>> ");
        type = input_key();
    }
 
    /* Заполняем массив в сoответствии с выбранным способом */
    if (type == 1) input_arr(a, size, c, b);
    if (type == 2) random_uh(a, size, c, b);
 
    /* Выводим массив на экран: */
    print_arr(a, size);
 
    positives(a, size);     // выводим индексы положительных элементов
    negatives(a, size);     // все отрицательные умножаем на 2
    print_arr(a, size);     // выводим получившийся массив на экран
 
    return 0;
}
// -------------------------------------------------------------
int input_key (void) {
    int i = 0;
    char ch, s[6];
    while ((ch=getchar()) != EOF && ch != '\n')
        if (i < 5)
            s[i++] = ch;
    s[i] = '\0';
    return atoi(s);
}
// -------------------------------------------------------------
void print_arr (int *a, int n) {
    puts("\nМассив:");
    for (int i = 0; i < n; i++)
        printf("% 4d ", a[i]);
    puts("");
}
// -------------------------------------------------------------
void input_arr (int *a, int n, int low, int high) {
    printf("\nВведите элементы массива:\n");
    for (int i = 0; i < n; i++)
        do {
            printf("a[%d]= ", i+1);
            a[i] = input_key();
        } while (a[i] < low || a[i] > high);
}
// -------------------------------------------------------------
void random_uh (int *a, int n, int low, int high) {
    srand( (unsigned int)time(NULL)/2 );
    high = high - low + 1;
    for (int i = 0; i < n; i++)
        a[i] = low + rand() %high;
}
// -------------------------------------------------------------
void positives (int *a, int n) {
    puts("\nИндексы положительных:");
    for (int i = 0; i < n; i++)
        if (a[i] > 0)
            printf("%4d ", i);
    puts("");
}
// -------------------------------------------------------------
void negatives (int *a, int n) {
    for (int i = 0; i < n; i++)
        if (a[i] < 0)
            a[i] *= 2;
}
// -------------------------------------------------------------
1
85 / 42 / 27
Регистрация: 11.11.2020
Сообщений: 69
08.02.2021, 02:37 7
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <time.h>
 
void Swap( int *a, int *b );
void FillArrKeyboard( int *arr, const int size );
void FillArrRandom( int *arr, const int size, const int low, const int high );
void PrintArr( const int *arr, const int size );
void PrintPositive( const int *arr, const int size );
int IncreaseNegative( int *arr, const int size );
int GetNum( const int low, const int high );
 
int main( void ) {
    srand( time( NULL ) );
 
    printf( "Введите размер массива: " );
    int n = GetNum( 1, CHAR_MAX );
    int *arr = ( int* ) malloc( n * sizeof(int) );
 
    printf( "Ввод массива: 1 - с клавиатуры, 2 - случайно в выбранном диапазоне: " );
 
    int key;
    key = GetNum( 1, 2 );
 
    if ( key == 1 )
        FillArrKeyboard( arr, n );
    else if ( key == 2 ) {
        puts( "\nВведите границы диапазона значений" );
        printf( "Нижняя граница: " );
        int low = GetNum( INT_MIN, INT_MAX );
        printf( "Верхняя граница: " );
        int high = GetNum( INT_MIN, INT_MAX );
 
        if ( low > high )
            Swap( &low, &high );
 
        FillArrRandom( arr, n, low, high );
    }
 
    PrintArr( arr, n );
 
    printf( "\nИндексы положительных элементов:\n" );
    PrintPositive( arr, n );
 
    if ( IncreaseNegative( arr, n ) ) {
        printf( "\nНовый массив:\n" );
        PrintArr( arr, n );
    } else
        printf( "\nОтрицательных чисел нет!" );
 
    free( arr );
 
    return EXIT_SUCCESS;
}
 
void Swap( int *a, int *b ) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
 
void FillArrKeyboard( int *arr, const int size ) {
    int i;
    for ( i = 0; i < size; ++i ) {
        printf( "arr[ %d ] = ", i );
        arr[ i ] = GetNum( INT_MIN, INT_MAX );
    }
}
 
void FillArrRandom( int *arr, const int size, const int low, const int high ) {
    int i;
    for ( i = 0; i < size; ++i )
        arr[ i ] = rand() % ( high - low + 1 ) + low;
}
 
void PrintArr( const int *arr, const int size ) {
    int i;
    for ( i = 0; i < size; ++i )
        printf( "%d ", arr[ i ] );
}
 
void PrintPositive( const int *arr, const int size ) {
    int i, flag = 0;
    for ( i = 0; i < size; ++i )
        if ( arr[ i ] > 0 ) {
            printf( "%d ", i );
            flag = 1;
        }
    if ( !flag )
        printf( "\nПоложительных чисел нет!" );
}
int IncreaseNegative( int *arr, const int size ) {
    int i, flag = 0;
    for ( i = 0; i < size; ++i )
        if ( arr[ i ] < 0 ) {
            arr[ i ] *= 2;
            flag = 1;
        }
 
    if ( !flag )
        return 0;
 
    return 1;
}
 
int GetNum( const int low, const int high ) {
    char *p, s[ 100 ];
    long num;
 
    while ( fgets( s, sizeof ( s ), stdin ) ) {
        num = strtol( s, &p, 10 );
 
        if ( p == s || *p != '\n' || num < low || num > high )
            printf( "Введите число от %d до %d: ", low, high );
        else
            break;
    }
 
    return num;
}
0
08.02.2021, 02:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2021, 02:37
Помогаю со студенческими работами здесь

Отрицательные элементы массива умножить на -2, а положительные на +2
Здравствуйте! Очень срочно нужна помощь. Вопрос жизни и смерти! VBA вообще не знаю. А задачу решить...

Вывести начальные и конечные индексы индексы всех непрерывных знакопеременных последовательностей чисел
Даны 3 массива.Вывести начальные и конечные индексы индексы всех непрерывных знакопеременных...

Вывести положительные элементы массива X затем отрицательные массива Y и количество выведенных чисел
даны два одномерных массива x(к) и y(м) заполненных произвольно. вывести положительные элементы...

Вывести отрицательные элементы матрицы и их индексы
Подскажите как доработать код, в интернете не нашёл никаких полезных данных.Нужно что бы выводились...

Отрицательные элементы массива умножить на квадрат собственного индекса
1)ввести одномерный массив А из N элементов. Отрицательные элементы массива умножить на квадрат...

Отрицательные элементы массива умножить на сумму квадратов их индексов
.Ввести двумерный массив AN M× . Отрицательные элементы массива умножить на сумму квадратов...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru