Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2012, 09:21   #1
Kirill43rus
 
Регистрация: 07.01.2012
Сообщений: 5
Печаль Не могу понять в чём ошибка

Циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или вниз (в зависимости от введенного режима). Со сдвигом вправо всё в порядке, а когда делаешь сдвиг вниз выскакивает ошибка:
Цитата:
Необработанное исключение в "0x00fc4805" в "Циклический сдвиг элементов матрицы.exe": 0xC0000005: Нарушение прав доступа при записи "0xfdfdfdfd".
Ошибка стала вылазить, когда сделал динамическое выделение памяти. При статическом выделении памяти всё было нормально.
PHP код:
#include "stdafx.h"
#include "locale.h"
#include "conio.h"
#include "stdlib.h"
#include "time.h"


int rndint range_minint range_max )
{
    return (double)
rand() / (RAND_MAX 1) * (range_max range_min) + range_min;
}


int _tmain(int argc_TCHARargv[])
{
    
setlocale(LC_ALL"Russian");
    
srand((unsigned)time(NULL));
    
int **AijNMkey, **tmpn;
    do{
        
printf("Введите количество строк M (1<M<=100): ");
        
scanf("%d", &M);
    }while((
M>100)||(M<2));
    do{
        
printf("Введите количество столбцов N (1<N<=100): ");
        
scanf("%d", &N);
    }while((
N>100)||(N<2));
    
A=(int **)calloc(Msizeof(int *));
    for(
i=0i<Mi++)
    
A[i]=(int *)calloc(Nsizeof(int));
    
tmp=(int **)calloc(Msizeof(int *));
    for(
i=0i<Mi++)
    
tmp[i]=(int *)calloc(Nsizeof(int));
    do{
        
printf("Ввод элементов матрицы: \n"
               " 1 - ввод с клавиатуры\n"
               " 2 - заполнение случайными числами"
               "\nВаш выбор: "
);
        
scanf("%i", &key);
        switch(
key)
        {
        case 
1:     for(i=0i<Mi++)
                    for(
j=0j<Nj++)
                    {
                        
printf("Введите A[%d][%d]",i,j);
                        
scanf("%d", &A[i][j]);
                    }
                    break;
        case 
2:     for(i=0i<Mi++)
                    for(
j=0j<Nj++)
                    {
                        
A[i][j]=rnd(-10,10);
                    }
                    break;
        default:    
printf("Такого действия нет");
                    break;
        }
    }while((
key!=1)&&(key!=2));
    for(
i=0i<Mi++)
    {
        for(
j=0j<Nj++) printf("%5d ",A[i][j]);
        
printf("\n");
    }
    
printf("Введите величину сдвига: ");
    
scanf("%d", &n);
    do{
        
printf("Выберите направление сдвига: \n"
               " 1 - вправо\n"
               " 2 - вниз"
               "\nВаш выбор: "
);
        
scanf("%i", &key);
        switch(
key)
        {
        case 
1:   if (n>N) do n=n-N; while(n>N);
                  for(
i=0i<Mi++)
                  {
                      for(
j=0j<nj++) tmp[i][j]=A[i][j+(N-n)];
                      for(
j=Nj>=nj--) A[i][j]=A[i][j-n];
                      for(
j=0j<nj++) A[i][j]=tmp[i][j];
                  }
                  break;
        case 
2:   if (n>M) do n=n-M; while(n>M);
                  for(
j=0j<Nj++)
                  {
                      for(
i=0i<ni++) tmp[i][j]=A[i+(M-n)][j];
                      for(
i=Mi>=ni--) A[i][j]=A[i-n][j];
                      for(
i=0i<ni++) A[i][j]=tmp[i][j];
                  }
                  break;
        default:  
printf("Такого действия нет");
                  break;
        }
    }while((
key!=1)&&(key!=2));
    for(
i=0i<Mi++)
    {
        for (
j=0j<Nj++) printf("%5d "A[i][j]);
        
printf("\n");
    }
    
_getch();
    return 
0;

Kirill43rus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу понять в чём ошибка famous9221 Общие вопросы C/C++ 2 27.11.2011 19:28
В чём ошибка..никак не могу понять Лися Общие вопросы по Java, Java SE, Kotlin 1 16.10.2011 00:50
не могу понять в чём причина salwator Паскаль, Turbo Pascal, PascalABC.NET 4 13.06.2011 11:25
понять в чём ошибка(((( Nastenova Помощь студентам 4 19.05.2010 23:06
строки в СИ, не могу понять в чём ошибка( viksen_ Помощь студентам 0 25.04.2010 16:59