Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
Maksimuso
2 / 2 / 1
Регистрация: 25.10.2014
Сообщений: 75
1

Сформируйте массив С, состоящий из элементов массивов А и В, упорядоченных по возрастанию

24.01.2015, 14:45. Просмотров 1562. Ответов 22
Метки нет (Все метки)

Задание : Даны два массива, упорядоченных по возрастанию: А[n] и B[m]. Сформируйте массив C[n+m], состоящий из элементов массивов А и В, упорядоченный по возрастанию.

Что не так ?
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
#include <stdio.h>
#include <conio.h>
#include <locale.h>
 
int main(void){
    const int max = 100;
    int A[max], B[max], C[2 * max];
    int i, j, k, n, m, r;
    setlocale(LC_ALL, "Russian");
    printf("Введите количество элементов массива А\n");
    scanf("%d", &n);
    printf("Введите количество элементов массива B\n");
    scanf("%d", &m);
    printf("Введите %d элемента/ов массива А\n", n);
    for (j = 0, i = 0, i < n, i++, j++);
    {
        scanf("%d", A[i]);
        C[j]=A[i];
    }
    printf("Введите %d элемента/ов массива B\n", m);
    for (k = 0, j = 0, k < m, k++, i++); 
    {
        scanf("%d", B[k]);
        C[j]=B[k];
    }
    printf("\nВведенный массив А:\n");
    for (i = 0; i < A + n; i++);
        printf("%d ", A[i]);
    printf("\nВведенный массив B:\n");
    for (k = 0, k < B + m , k++);
        printf("%d ", B[k]);
    r = m + n;
    for (k = 0; k < r - 1; k++);
    {
        for (j = 0; j < C + r - 1; j++); 
{
            if C[j] > C[j] + 1; 
        }
    }
    printf("\nУпорядоченный массив С:\n");
    for (j = 0, j < C + r, j++);
        printf("%d ", C[j]);
    _getch();
    return 0;
}
ошибки:
Код
1>------ Сборка начата: проект: ConsoleApplication1, Конфигурация: Debug Win32 ------
1>  Исходный код.cpp
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(11): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\stdio.h(283): см. объявление "scanf"
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(13): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\stdio.h(283): см. объявление "scanf"
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(15): error C2143: синтаксическая ошибка: отсутствие ";" перед ")"
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(21): error C2143: синтаксическая ошибка: отсутствие ";" перед ")"
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(27): error C2446: <: нет преобразования "int *" в "int"
1>          Не существует контекста, в котором такое преобразование возможно
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(27): error C2040: <: "int" отличается по уровням косвенного обращения от "int *"
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(30): error C2446: <: нет преобразования "int *" в "int"
1>          Не существует контекста, в котором такое преобразование возможно
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(30): error C2040: <: "int" отличается по уровням косвенного обращения от "int *"
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(30): error C2143: синтаксическая ошибка: отсутствие ";" перед ")"
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(35): error C2446: <: нет преобразования "int *" в "int"
1>          Не существует контекста, в котором такое преобразование возможно
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(35): error C2040: <: "int" отличается по уровням косвенного обращения от "int *"
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(37): error C2061: синтаксическая ошибка: идентификатор "C"
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(41): error C2446: <: нет преобразования "int *" в "int"
1>          Не существует контекста, в котором такое преобразование возможно
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(41): error C2040: <: "int" отличается по уровням косвенного обращения от "int *"
1>c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\исходный код.cpp(41): error C2143: синтаксическая ошибка: отсутствие ";" перед ")"
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2015, 14:45
Ответы с готовыми решениями:

Сформируйте массив C, состоящий из элементов массивов А и В, упорядоченный по возрастанию
Даны два массива, упорядоченных по возрастанию: А и B. Сформируйте массив C,...

Сформировать массив C[N+M], состоящий из элементов массивов А и В, упорядоченный по возрастанию
Ввести в память ПЭВМ два массива целочисленных массива А и B. ...

Упорядочить массив С(12), состоящий из элементов А, по возрастанию, найти минимальный по модулю элемент
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt;...

Из двух упорядоченных массивов составить третий упорядоченный массив
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; using namespace...

Сформировать новый массив B из элементов массива А, упорядоченных по модулю
В массиве А(60) лежат целые числа. Сформировать новый массив В при помощи...

22
19dmitry
35 / 35 / 22
Регистрация: 18.01.2014
Сообщений: 145
04.02.2015, 21:30 21
Цитата Сообщение от Maksimuso Посмотреть сообщение
в моём коде что не так ?
Конкретно в Вашем коде блок
Цитата Сообщение от Maksimuso Посмотреть сообщение
for (k1 = 0; k1<r - 1; k1++){
* * * * for (C[k1] = C[k1]; C[k1]<C[k1] + r - 1; C[k1]++){
* * * * * * if (C[k1] >(C[k1] + 1)){
* * * * * * * * rab = C[k1];
* * * * * * * * C[k1] = (C[k1] + 1);
* * * * * * * * (C[k1] + 1) = rab;
* * * * * * }
* * * * }
* * }
необходимо переделать полностью. Потому, что он не только содержит грамматические ошибки, но и лишен смысла вообще.
Вам необходимо:
1) Копировать массив А и массив В в третий массив.
2) Сортировка по возрастанию полученного массива С.
Правильный вариант Вам был уже представлен pdmitriya, предлагаю Вам просто его разобрать и заменить названия переменных на свои.

Добавлено через 1 час 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
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#define N 5
#define M 8
int main(void)
{
    int i, j, r;
    int k=0;
    int rab=0;
    int A[N] = { 1, 3, 2, 5, 4 };
    int B[M] = { 6, 7, 8, 9, 10, 12, 11, 13 };
    int C[N+M];
    
    printf("A = ");
 
    for (i=0; i<N; i++)
        printf("%d ", A[i]);
 
    for(i=1; i<N; i++) /* сортируем массив A*/
    {
        for(j=0; j<N-1; j++)
        {
            if(A[j]>A[j+1])
            {
                rab=A[j];
                A[j]=A[j+1];
                A[j+1]=rab;
            }
        }
    }
 
    for(i=1; i<M; i++) /* сортируем массив B*/
    {
        for(j=0; j<M-1; j++)
        {
            if(B[j]>B[j+1])
            {
                rab=B[j];
                B[j]=B[j+1];
                B[j+1]=rab;
            }
        }
    }
 
    printf("\nB = ");
    for (j=0; j<M; j++)
        printf("%d ", B[j]);
 
    setlocale (0, "");
    printf("\n\nОтсортированный массив \nA = ");
 
    for(i=0; i<N; i++)/* отображаем отсортированный массив A */ 
    {
        printf("%d ", A[i]);
    }
 
    printf("\nB = ");
    for(i=0; i<M; i++) /* отображаем отсортированный массив B */
    {
        printf("%d ", B[i]);
    }
    
    r=N+M;
    for (i=0; i<r; i++) /*копируем массивы A и B в массив С*/
    {
        if(i<N)
            C[i]=A[i];
        else if(i>=N)
        {
            C[i]=B[k];
            k++;
        }
    }
 
    for(i=1; i<r; i++) /* сортируем массив C*/
    {
        for(j=0; j<r-1; j++)
        {
            if(C[j]>C[j+1])
            {
                rab=C[j];
                C[j]=C[j+1];
                C[j+1]=rab;
            }
        }
    }
     
     printf("\n\nОтображаем готовый массив \nC = ");
     
     for (i=0; i<r; i++)
         printf("%d ", C[i]);
     
     printf("\n");
     _getch();
     return 0;
}
Если непонятно, задавайте вопросы.
0
Catstail
Модератор
24165 / 12153 / 2179
Регистрация: 12.02.2012
Сообщений: 19,736
06.02.2015, 15:56 22
Это очень плохой код!!! Если массивы уже упорядочены, то стыковать и сортировать повторно - алгоритмическая глупость. Неуд... Сортированные массивы для сохранения порядка нужно сливать. Примерно так:

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
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
 
int *merge(int *A, int n, int *B, int m)
{
    int *R;
    int i,j,k,p;
    
    k=n+m;
    R=(int *) calloc(k,sizeof(int));
    
    i=0;
    j=0;
    p=0;
    
    while (1)
    {
        if (i > n) {for (; j<m; j++) R[p++]=B[j]; break;}
        if (j > m) {for (; i<n; i++) R[p++]=A[i]; break;} 
        if (A[i] > B[j]) R[p++]=B[j++];
        if (A[i] < B[j]) R[p++]=A[i++];
    }     
    return R;
}             
 
int main(int argc, char *argv[])
{
 
  int A[5]={1,2,6,8,17};
  int B[6]={0,4,3,9,21,32};
  int *R;
  int i;
  
  R=merge(A,5,B,6);
  for (i=0; i<11; i++) printf("%d ",R[i]);
  printf("\n");
  
  free(R);
 
  system("PAUSE");  
  return 0;
}
1
19dmitry
35 / 35 / 22
Регистрация: 18.01.2014
Сообщений: 145
06.02.2015, 16:21 23
Да, полностью согласен. Спасибо за критику.
0
06.02.2015, 16:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2015, 16:21

Упорядочить массив размера N по возрастанию. Дополнительных массивов не использовать
Упорядочить массив размера N по возрастанию. Дополнительных массивов не...

Дано одномерный массив Т, состоящий из 18 элементов
Дано одномерный массив Т, состоящий из 18 элементов.Елементы в массиве...

Объединение двух упорядоченных массивов
Даны массив A из N целых элементов массив B из M целых элементов. Оба массива...


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

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

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