Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 05.01.2017
Сообщений: 2
1

В заданной матрице циклически сдвинуть элементы каждой строки вправо на число позиций, равное индексу строки

05.01.2017, 02:44. Просмотров 965. Ответов 5
Метки нет (Все метки)

Не понимаю, почему при запуске программы компилятор вылетает. Задание - написать программу, которая в двумерном статическом массиве типа int(при этом элементы инициализируются случайным образом) размеров 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
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
const unsigned M=5;
 
void init_array(int A[][M], unsigned n);
void print_of_array(int A[][M], unsigned n);
void swap (int *pa, int *pb);
void changing_of_array(int A[][M], unsigned n);
int main(){
    const unsigned N=5;
        int A[N][M];
        init_array(A,N);
        print_of_array(A,N);
        printf("\n");
                printf("\n");
        changing_of_array(A,N);
        print_of_array(A,N);
        getchar();
        return 0;
    
}
 
void init_array(int A[][M], unsigned n){
    for (unsigned i=0; i<n; i++)
    for (unsigned j=0; j<M;j++)
    A[i][j]=rand()%100;
}
void print_of_array(int A[][M], unsigned n){
    for (unsigned i=0; i<n; i++){
    for (unsigned j=0; j<M;j++)
        printf("%5d", A[i][j]);
    printf("\n");}
}
void swap(int *pa, int *pb){
    int temp=*pa;
    *pa=*pb;
    *pb=temp;
    return;
                                      }
void changing_of_array(int A[][M], unsigned n)  {
    unsigned l=1;
    for (unsigned i=1; i<n; i++)              {
    for (unsigned j=M-1; j+1>0; j--){
        if ((j-l)<0) break;
    swap(&A[i][j],&A[i][j-l]);            }
l++;    
                                                             }
    
                                                                  }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2017, 02:44
Ответы с готовыми решениями:

Элементы заданного массива X циклически сдвинуть на K позиций вправо (влево)
Помогите, пожалуйста)

Указатель: Сдвинуть числа в матрице заданного размер n * n на k позиций вправо
Нужно сдвигать числа в матрице заданного размер n*n на k единиц направо Сделать это нужно через...

Сдвинуть элементы массива циклически на M позиций влево
Элементы массива циклически сдвинуть на M позиций влево

Элементы заданного массива X циклически сдвинуть на K позиций
Элементы заданного массива X циклически сдвинуть на K позиций вправо (влево).

5
1116 / 929 / 429
Регистрация: 25.12.2016
Сообщений: 3,031
05.01.2017, 12:45 2
Ошибка здесь:
C
1
for (unsigned i=0; i<n; i++)
Если не включен режим C99, то в цикле нельзя объявлять переменные (параметры цикла). Объяви их перед циклом:
C
1
2
3
4
    unsigned i, j;
    for (i=0; i<n; i++)
        for (j=0; j<M; j++)
            A[i][j]=rand()%100;
Добавлено через 7 минут
А можно просто включить режим C99 и не париться.
0
Эксперт C
23449 / 14690 / 3095
Регистрация: 24.12.2010
Сообщений: 31,307
05.01.2017, 13:15 3
Qwerty41412,1. Ставь, пожалуйста, теги кода. Так легче будет понимать твой код и с тобой разговаривать.
2. Привыкай к правильной терминологии.
Цитата Сообщение от Qwerty41412 Посмотреть сообщение
компилятор вылетает.
Он вовсе не вылетает! Он прекрасно работает! Он находит твои ошибки. То есть делает именно то, для чего и предназначен. Ты ему должен спасибо сказать.
3. Разве компилятор кончает свою работу молча? Он же тебе говорит, где и какие ошибки он нашел. Эта информация, которая должна помочь тебе ошибки исправить. Так почему же ту скрываешь эту информацию от нас?
0
0 / 0 / 0
Регистрация: 05.01.2017
Сообщений: 2
05.01.2017, 15:43  [ТС] 4
В том-то и дело, что завершает работу молча, не выдавая при этом никакой информации. При запуске программы он просто вылетает

Добавлено через 12 минут
В смысле после компиляции кода программа просто вылетает
0
1116 / 929 / 429
Регистрация: 25.12.2016
Сообщений: 3,031
05.01.2017, 16:39 5
Цитата Сообщение от Qwerty41412 Посмотреть сообщение
В смысле после компиляции кода программа просто вылетает
Значит программа успешно компилируется? Тогда мой первый ответ был мимо цели.

Добавлено через 3 минуты
Кстати, у меня программа работает, ничего не вылетает.
1
Эксперт C
23449 / 14690 / 3095
Регистрация: 24.12.2010
Сообщений: 31,307
05.01.2017, 19:11 6
Цитата Сообщение от Qwerty41412 Посмотреть сообщение
В смысле после компиляции кода программа просто вылетает
Это уже слегка проясняет ситуацию. Да, программа твоя, и она вылетает молча, потому что ты ее не научил разговаривать. Попробуй вставить отладочные printf в разных точках. Или воспользуйся отладчиком.
То есть к компилятору вопросов нет? Так? Займись тем, что ты наваял.
И не забудь мою первую просьбу из поста 3
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2017, 19:11

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

Циклически сдвинуть элементы массива на К разрядов вправо
Помогите пожалуйста написать вот такую программку: Ввести массив целых чисел длиной n (n &lt; 30)....

Элементы массива нужно сдвинуть циклически влево на k позиций
Помогите написать программу на СИ: Дан одномерный массив a={3,7,1,5,3} элементы массива нужно...

Сдвинуть целое знаковое число А циклически на B разрядов вправо
Дано длинное(4байта) целое знаковое число А необходимо сдвинуть его циклически на B разрядов вправо...

Циклически сдвинуть элементы массива на заданное K мест влево (вправо)
Вывести массив из файла на экран по пять элементов в строке. Элементы массива циклически сдвинуть...


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

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

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