Форум программистов, компьютерный форум CyberForum.ru

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

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

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

12.10.2009, 17:43. Просмотров 639. Ответов 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;(слева от этой строки появляется желтая стрелка)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2009, 17:43     Поменять местами элементы
Посмотрите здесь:

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

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

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

Поменять местами элементы в массиве - C++
Даны действительные числа х1, …, хn (все числа попарно различны). Поменять местами наибольший и наименьший элементы.

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

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

Поменять местами элементы массива - C++
В массиве A из N элементов поменять местами первый элемент с последним, второй - с предпоследним и т.д. #include &lt;iostream&gt; #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
12.10.2009, 20:16     Поменять местами элементы #2
всё оч просто, вы изначально не проинициализировали переменные k1,k2,l1,l2 и когда в ходе выполнения программы ниразу не выполняется условие присвоить какой-либо паре ваших необъявленных переменных реальные значения, то происходит, в последсвии, обращение в космос, так как в k1,k2,l1,l2 лежит мусор
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;
}
Увы, но массив каким и был, таким и выводиться....исходный равен конечному...
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
13.10.2009, 05:40     Поменять местами элементы #4
вообще в задачах такого рода предпологается, !обычно!, что в ходе работы всегда произойдёт присваивание вашим необЪявленным переменным, однако, в вашем случае из-за условий задачи возможен случай когда не будет максимального среди отрицательных из-за отсутствия отрицательных элементов.
в этом случает требуется отслеживать такую ситуацию и выводить сообщение от том что перестановка не возможна или просто ничего не делать.
для отслеживания такой ситуации следует проинициализировать изначально ваши переменные значениями которые они не смогут получить при работе программы и после прогона циклов проверят изменилось ли первоначальное значение.
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.10.2009, 07:28     Поменять местами элементы #5
Цитата Сообщение от NastiKor
(слева от этой строки появляется желтая стрелка)
перед ней не хватает фигурной скобки, закрывающей
TanT
эволюционирую потихоньку
465 / 463 / 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;
}
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))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2009, 08:55     Поменять местами элементы
Еще ссылки по теме:

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

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

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

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

Поменять местами элементы в массиве - C++
Решаю задачу из учебника С. Праты Нужно заполнить массив значениями, а затем кроме первого и последнего вывести их в обратном порядке. ...


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

Или воспользуйтесь поиском по форуму:
TanT
эволюционирую потихоньку
465 / 463 / 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 это значение которому при работе не может быть равны ваши К, то есть анализируем: если значения не изминились значит выводим сообщение иначе меняем найденные элементы
вот
в вашем случае из-за условий задачи возможен случай когда не будет максимального среди отрицательных из-за отсутствия отрицательных элементов.
в этом случает требуется отслеживать такую ситуацию и выводить сообщение от том что перестановка не возможна или просто ничего не делать.
для отслеживания такой ситуации следует проинициализировать изначально ваши переменные значениями которые они не смогут получить при работе программы и после прогона циклов проверят изменилось ли первоначальное значение.
Yandex
Объявления
13.10.2009, 08:55     Поменять местами элементы
Ответ Создать тему
Опции темы

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