С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
NastiKor
1 / 1 / 0
Регистрация: 05.10.2009
Сообщений: 101
#1

Поменять местами элементы - C++

12.10.2009, 17:43. Просмотров 665. Ответов 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
// Lab5. Задача 1.cpp : Defines the entry point for the console application.
// Задан двумерный массив float a[4][5]. Поменять местами max среди отрицательных элементов и min среди положительных 
 
#include "stdafx.h"
#include "conio.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{ float a[4][5],MaxOtr,MinPol;
  int r,c,k1,k2,l1,l2;
 
  MaxOtr=-1.0e20;
  MinPol=1.0e20;
 
printf("Vvedite ishodnyj massiv: \n");
 for(r=0;r<4;r++)
 {for(c=0;c<5;c++)
  {scanf("%f", &a[r][c]); 
   printf("\n");
  }
 }
printf("\n");
 
 for(r=0;r<4;r++)
 {for(c=0;c<5;c++)
   {if((a[r][c]>0) && (a[r][c]<MinPol))
   { MinPol=a[r][c];
     k1=r;
     l1=c;
 }
   if((a[r][c]<0) && (a[r][c]>MaxOtr))
   { MaxOtr=a[r][c];
     k2=r;
     l2=c;
   }
 }
 
   a[k1][l1]=MaxOtr;
   a[k2][l2]=MinPol;
 
   printf("Konechnyj massiv:\n");
for(r=0;r<4;r++)
{for(c=0;c<5;c++)
   {printf("%03.1f ", a[r][C]); 
   }
   printf("\n");
   }
 }
  getch();
    return 0;
}
Запускаю программу, ввожу первую строку, после этого нажимаю Enter...после этого пишет ошибку:
Неуправляемое исключение в "0x004115cc" в "Lab5. Задача 1.exe": 0xC0000005: Нет доступа при записи "0x334631fc".

и указывает строку, где написано a[k2][l2]=MinPol;(слева от этой строки появляется желтая стрелка)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2009, 17:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поменять местами элементы (C++):

Поменять местами первый и последний элементы. Все единичные элементы массива заменить нулями - C++
Люди добрые, помогите плиз с задачками. В массиве Р, размерности 150 150. поменять местами первый и последний элементы; все единичные...

Поменять местами элементы главной и побочной диагонали матрицы и найти столбцы, элементы которых убывают - C++
С++ Задана матрица A(n,n). Поменять местами элементы главной и побочной диагонали. В преобразованной матрице найти столбцы, элементы...

Поменять местами элементы - C++
Поменять местами элементы k-го столбца и 1-й строки матрицы A = (a ), i = j = 1,2, ..., n.

Поменять местами элементы массива - C++
в двух кваратних матрицах видилено четыре сектора , ограниченные диагоналями : верхний, нижний , левый и правый . Поменять местами элементы...

Поменять местами элементы матрицы - C++
Как поменять местами минимальный элемент массива А(57) и матрицы В(7*5)

Поменять местами элементы массива - C++
Есть указатель Mas void *Mas; на массив структур вида. struct ST{ int a; int b; int c; int d; }; Нужно написать функцию,...

7
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
12.10.2009, 20:16 #2
всё оч просто, вы изначально не проинициализировали переменные k1,k2,l1,l2 и когда в ходе выполнения программы ниразу не выполняется условие присвоить какой-либо паре ваших необъявленных переменных реальные значения, то происходит, в последсвии, обращение в космос, так как в k1,k2,l1,l2 лежит мусор
0
NastiKor
1 / 1 / 0
Регистрация: 05.10.2009
Сообщений: 101
13.10.2009, 00:36  [ТС] #3
Объясните, пожалуйста, т.е. я их не задала изначально сразу после float и int....??

Добавлено через 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
// Lab5. Задача 1.cpp : Defines the entry point for the console application.
// Задан двумерный массив float a[4][5]. Поменять местами max среди отрицательных элементов и min среди положительных 
 
#include "stdafx.h"
#include "conio.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{ float a[4][5],MaxOtr,MinPol;
  int i,j,k1,k2,l1,l2;
 
  MaxOtr=-1.0e20;
  MinPol=1.0e20;
  k1=0;
  k2=0;
  l1=0;
  l2=0;
 
printf("Vvedite ishodnyj massiv: \n");
 for(i=0;i<4;i++)
 {for(j=0;j<5;j++)
  {scanf("%f", &a[i][j]); 
  }
 }
printf("\n");
 
 for(i=0;i<4;i++)
 {for(j=0;j<5;j++)
   {if(a[i][j]>0 && a[i][j]<MinPol)
   { MinPol=a[i][j];
     k1=i;
     l1=j;
 }
   if(a[i][j]<0 && a[i][j]>MaxOtr)
   { MaxOtr=a[i][j];
     k2=i;
     l2=j;
   }
 }
 
   a[k1][l1]=MaxOtr;
   a[k2][l2]=MinPol;
 
   printf("Konechnyj massiv:\n");
for(i=0;i<4;i++)
{for(j=0;j<5;j++)
   {printf("%03.1f ", a[i][j]); 
   }
   printf("\n");
   }
 }
  getch();
    return 0;
}
Увы, но массив каким и был, таким и выводиться....исходный равен конечному...
0
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
13.10.2009, 05:40 #4
вообще в задачах такого рода предпологается, !обычно!, что в ходе работы всегда произойдёт присваивание вашим необЪявленным переменным, однако, в вашем случае из-за условий задачи возможен случай когда не будет максимального среди отрицательных из-за отсутствия отрицательных элементов.
в этом случает требуется отслеживать такую ситуацию и выводить сообщение от том что перестановка не возможна или просто ничего не делать.
для отслеживания такой ситуации следует проинициализировать изначально ваши переменные значениями которые они не смогут получить при работе программы и после прогона циклов проверят изменилось ли первоначальное значение.
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
13.10.2009, 07:28 #5
Цитата Сообщение от NastiKor
(слева от этой строки появляется желтая стрелка)
перед ней не хватает фигурной скобки, закрывающей
0
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
13.10.2009, 08:26 #6
accept, её бы ещё из нужного места экспроприировать.
вот, мне кажется так, с учётом всех выше перечисленных замечаний
и ещё, уважаемая NastiKor, осваивайте скорее файлы, жутко же не удобно данные руками забивать
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
// Lab5. Задача 1.cpp : Defines the entry point for the console application.
// Задан двумерный массив float a[4][5]. Поменять местами max среди отрицательных элементов и min среди положительных 
 
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
 
int main()
{ 
    float a[4][5],MaxOtr,MinPol;
    int i,j,k1,k2,l1,l2;
    MaxOtr=-1.0e20;MinPol=1.0e20;
    k1=k2=4+1;
    
    printf("Vvedite ishodnyj massiv: \n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            scanf("%f", &a[i][j]); 
        }
    }
    printf("\n");
    
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            if(a[i][j]>0 && a[i][j]<MinPol)
            { 
                MinPol=a[i][j];
                k1=i;
                l1=j;
            }
            if(a[i][j]<0 && a[i][j]>MaxOtr)
            { 
                MaxOtr=a[i][j];
                k2=i;
                l2=j;
            }
        }
    }
 
    if((k1!=4+1)&&(k2!=4+1)) // изменилось значение
    {
        a[k1][l1]=MaxOtr;
        a[k2][l2]=MinPol;
    }
    else
        printf("NOT changes\n");
 
    
    printf("Konechnyj massiv:\n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            printf("%03.1f ", a[i][j]); 
        }
        printf("\n");
    }
 
    getch();
    return 0;
}
0
NastiKor
1 / 1 / 0
Регистрация: 05.10.2009
Сообщений: 101
13.10.2009, 08:36  [ТС] #7
TanT, спасибо вам большое, всё работает! P/S А директива #include <stdlib.h> для чего нужна в данном случае?
И еще не очень понятно условие:

if((k1!=4+1)&&(k2!=4+1))
0
TanT
эволюционирую потихоньку
466 / 464 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
13.10.2009, 08:55 #8
Цитата Сообщение от NastiKor Посмотреть сообщение
TanT, спасибо вам большое, всё работает! P/S А директива #include <stdlib.h> для чего нужна в данном случае?
для весу и солидности случайно затесалась

if((k1!=4+1)&&(k2!=4+1))
это к моей предыдущей тираде, 4+1 это значение которому при работе не может быть равны ваши К, то есть анализируем: если значения не изминились значит выводим сообщение иначе меняем найденные элементы
вот
в вашем случае из-за условий задачи возможен случай когда не будет максимального среди отрицательных из-за отсутствия отрицательных элементов.
в этом случает требуется отслеживать такую ситуацию и выводить сообщение от том что перестановка не возможна или просто ничего не делать.
для отслеживания такой ситуации следует проинициализировать изначально ваши переменные значениями которые они не смогут получить при работе программы и после прогона циклов проверят изменилось ли первоначальное значение.
0
13.10.2009, 08:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2009, 08:55
Привет! Вот еще темы с ответами:

Поменять местами элементы массива - C++
Есть задача:Найти макс. элемент одномерного массива, минимальный и поменять местами максимальный и минимальный элемент одномерного массива....

Поменять элементы массива местами - C++
Есть массив int mas={1,2,4,5,7,8} как поменять в нём элементы , чтобы получился массив int mas={2,1,5,4,8,7} то есть меня элементы...

Поменять местами элементы массива - C++
в заданном массиве из n элементов поменять местами элементы с n/2+1 по n: a(индекс n/2+i)=a(индекс n-i+1), i=1,...,n/2 Кто нить объяснит...

Поменять местами элементы в очереди - C++
1-ая Сделать очередь (любым способом). Распечатать её содержимое. Поменять местами первый и ТРЕТИЙ элемент. Снова распечатать. ...


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

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

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