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

Сортировка отрицательных чисел нечетных строк - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 16:31     Сортировка отрицательных чисел нечетных строк #1
Я никак не могу понять, как провести сортировку по возрастанию отрицательных чисел в нечетных строках матрицы методом пузырька.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2010, 16:31     Сортировка отрицательных чисел нечетных строк
Посмотрите здесь:

C++ Для чисел от -50 до 50 найти кол-во четных отрицательных и кол-во положительных нечетных чисел
элементы матрицы Q,стоящие на пересечении нечетных строк и нечетных столбцов заменить переменной P C++
C++ Дано двумерный массив целых чисел. Найти номер строки, в которой сумма отрицательных нечетных элементов наибольшая
найти разность между произведением нечетных чисел и наибольшим среди отрицательных C++
C++ Найти разность между произведением нечетных чисел и наибольшим среди отрицательных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
08.01.2010, 16:55     Сортировка отрицательных чисел нечетных строк #2
Давайте подумаем вместе. Сначало предлагаю подумать над тем как сделать сортировку в одной строке. Вот представьте есть одна строка, в ней есть и положительные и отрицательные элементы. Пока код никакой писать не надо, просто представьте что перед Вами лежат листки бумаги с написаными числами. Опишите, как бы Вы их сортировали?
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 17:13  [ТС]     Сортировка отрицательных чисел нечетных строк #3
последовательно слева-направо сравнивал соседние числа,если правое меньше левого-менял бы местами.и так n-1 раз.n-количество листков
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
08.01.2010, 17:42     Сортировка отрицательных чисел нечетных строк #4
Цитата Сообщение от Stuzzy Посмотреть сообщение
последовательно слева-направо сравнивал соседние числа,если правое меньше левого-менял бы местами.и так n-1 раз.n-количество листков
Добавлю только, что делал бы это с чилами которые меньше 0. Правильно.
А сможете, пока не обращая внимание на то какое число (отрицательное или положительное) написать сортировку в одной строке?
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 17:48     Сортировка отрицательных чисел нечетных строк #5
Дополняешь к этому два условия: нечетную строку и отрицательный элемент. придется тебе каждую итерацию искать те же отрицательные элементы и количество итераций будет равно количеству элементов в строке-1. Да, много лишнего. Можешь еще формировать одномерный массив и сортировать его, затем вставлять элементы отсортированного массива на место отрицательных элементов- два раза придется искать отриц.элементы

Добавлено через 2 минуты
Может, я не права Я б так делала
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 18:01  [ТС]     Сортировка отрицательных чисел нечетных строк #6
для строки:

for (k=0, k<n-1; k++)
{
for (i=0; i<n-1-k; i++)
{
if (d[i]>d[i+1])
{
x=d[i];
d[i]=d[i+1];
d[i+1]=x;
}
}
}
к-количество проходов,n-размер массива
вроде бы так?
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 18:57     Сортировка отрицательных чисел нечетных строк #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
k=0;
for (i=0;i<n;i+=2)
   for(j=0;j<n;j++)
{
{
  if (a[i][j]<0)
  d[k]=a[i][j];
  k++;
}
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
for(j=0;j<n;j++)
for (p=0; p<k; p++)
 if (a[i][j]<0)
{
a[i][j]=d[p];
}
}
Добавлено через 30 минут
C++
1
2
3
4
5
6
7
8
9
10
for(b=0;b<k-1;b++)
{
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
}
Еще же один цикл нужен , я забыла, много переменных получается. Ну одну стоку вставить надо
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 19:49  [ТС]     Сортировка отрицательных чисел нечетных строк #8
то,что Вы добавили позже, надо добавить после:
if (a[i][j]<0)
d[k]=a[i][j];
k++;
}
так?
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 19:53     Сортировка отрицательных чисел нечетных строк #9
да
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 20:43  [ТС]     Сортировка отрицательных чисел нечетных строк #10
спасибо

Добавлено через 44 минуты
блин.не получается у меня вставить элемент во всё задание.
оно было вот таким:
Дан целый массив максимальной размерности 20*20. Провести сортировку по возрастанию отрицательных чисел в нечетных строках. Ввод исходного массива организовать из файла, при вводе учесть возможность ввода массива меньшей размерности.
Результаты работы программы вывести на экран и в файл.

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
#include <stdio.h>
#include <conio.h>
void main()
{
    FILE *fw,*fr;
    double a[20][20];
    int i,j,razmer;
    fw=fopen("log.txt","w");
    do
    {
        printf("vvedite razmer matrici (maximum 20):\n");
        scanf("%d",&razmer);
    }
    while (razmer>20 || razmer<1);
    printf("\n");
    fr=fopen("input.txt","r");
    for (i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            fscanf (fr, "%lf", &a[i][j]);
        }
    }
    fclose(fr);
    printf ("\n Matrix: \n");
    fprintf (fw,"Matrix: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    // вот здесь сортировка должна быть
   
    printf ("\n Rezultat: \n");
    fprintf (fw,"Rezultat: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    getch();
}
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 20:50     Сортировка отрицательных чисел нечетных строк #11
Что именно не получается?
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 20:56  [ТС]     Сортировка отрицательных чисел нечетных строк #12
вставляю этот элемент
до этого естественно в переменные вписываю новые
там дофига ошибок,в том числе почти в каждой "subscripts on non-array" со строки где d[k]=a[i][j]; и до строки где d[p+1]=x;
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 20:59     Сортировка отрицательных чисел нечетных строк #13
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
#include <stdio.h>
#include <conio.h>
void main()
{
    FILE *fw,*fr;
    double a[20][20],x,d[20];
    int i,j,razmer,k=0,p;;
    fw=fopen("log.txt","w");
    do
    {
        printf("vvedite razmer matrici (maximum 20):\n");
        scanf("%d",&razmer);
    }
    while (razmer>20 || razmer<1);
    printf("\n");
    fr=fopen("input.txt","r");
    for (i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            fscanf (fr, "%lf", &a[i][j]);
        }
    }
    fclose(fr);
    printf ("\n Matrix: \n");
    fprintf (fw,"Matrix: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    // вот здесь сортировка должна быть
    
 
 
for (i=0;i<razmer;i+=2)
   for(j=0;j<razmer;j++)
{
{
  if (a[i][j]<0)
  d[k]=a[i][j];
  k++;
}
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
for(j=0;j<razmer;j++)
for (p=0; p<k; p++)
 if (a[i][j]<0)
{
a[i][j]=d[p];
}
}
    printf ("\n Rezultat: \n");
    fprintf (fw,"Rezultat: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    getch();
}
Добавлено через 1 минуту
Я на С++ пишу, ты переделывай, если че не так.

Добавлено через 1 минуту
non array- я думаю, ты не объявил его как массив
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 21:06  [ТС]     Сортировка отрицательных чисел нечетных строк #14
ошибок нет
только не хочет он его сортировать))
вот например забил массив и че получилось:
Matrix:
-2.00 -4.00 -6.00 5.00 -3.00
3.00 -7.00 9.00 -6.00 2.00
1.00 0.00 -5.00 9.00 -9.00
0.00 -3.00 2.00 -1.00 6.00
-7.00 3.00 5.00 2.00 -1.00
Rezultat:
-2.00 -2.00 -2.00 5.00 -2.00
3.00 -7.00 9.00 -6.00 2.00
1.00 0.00 0.00 9.00 0.00
0.00 -3.00 2.00 -1.00 6.00
0.00 3.00 5.00 2.00 0.00
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 21:14     Сортировка отрицательных чисел нечетных строк #15
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
#include <stdio.h>
#include <conio.h>
void main()
{
    FILE *fw,*fr;
    double a[20][20],x,d[20];
    int i,j,razmer,k=0,p=0,b;;
    fw=fopen("log.txt","w");
    do
    {
        printf("vvedite razmer matrici (maximum 20):\n");
        scanf("%d",&razmer);
    }
    while (razmer>20 || razmer<1);
    printf("\n");
    fr=fopen("input.txt","r");
    for (i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            fscanf (fr, "%lf", &a[i][j]);
        }
    }
    fclose(fr);
    printf ("\n Matrix: \n");
    fprintf (fw,"Matrix: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    // вот здесь сортировка должна быть
        
 
 
for (i=0;i<razmer;i+=2)
   for(j=0;j<razmer;j++)
{
{
  if (a[i][j]<0)
  d[k]=a[i][j];
  k++;
}
for(b=0;b<k-1;b++)
{
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
}
p=0;
for(j=0;j<razmer;j++)
 if (a[i][j]<0)
{a[i][j]=d[p]
p++;
}
}
    printf ("\n Rezultat: \n");
    fprintf (fw,"Rezultat: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    getch();
}
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 21:21  [ТС]     Сортировка отрицательных чисел нечетных строк #16
поправил,результат тот же :\
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 21:33     Сортировка отрицательных чисел нечетных строк #17
C++
1
2
3
4
5
6
p=0;
for(j=0;j<razmer;j++)
 if (a[i][j]<0)
{a[i][j]=d[p]
p++;
}
Это исправил???
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 21:34  [ТС]     Сортировка отрицательных чисел нечетных строк #18
в 62 строке добавить в конце ;
ошибок нет,но не сортирует
да,исправил я это
А у вас работает? вы проверяли? или только код написали
Tani
25 / 25 / 1
Регистрация: 27.12.2009
Сообщений: 82
08.01.2010, 21:42     Сортировка отрицательных чисел нечетных строк #19
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
for (i=0;i<razmer;i+=2)
   for(j=0;j<razmer;j++)
{
{
  if (a[i][j]<0)
  {            // здесь еще скобки нужны были
d[k]=a[i][j];
  k++;
}
}
for(b=0;b<k-1;b++)
{
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
}
p=0;
for(j=0;j<razmer;j++)
 if (a[i][j]<0)
{a[i][j]=d[p]
p++;
}
}
Добавлено через 3 минуты
То и именно, что я без программы, на каникулах дома, эт тебе надо отладку было делать пошаговую, смотреть, где ошибка. Компилятор из меня плохой
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2010, 21:46     Сортировка отрицательных чисел нечетных строк
Еще ссылки по теме:

C++ Провести сортировку по возрастанию отрицательных чисел в нечетных строках
C++ Сортировка строк в файле по количеству чисел в строке
C++ Отсортировать по сумме нечетных и отрицательных элементов строк матрицы по возрастанию

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

Или воспользуйтесь поиском по форуму:
Stuzzy
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 13
08.01.2010, 21:46  [ТС]     Сортировка отрицательных чисел нечетных строк #20
вот так всё получилось
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
#include <stdio.h>
#include <conio.h>
void main()
{
    FILE *fw,*fr;
    double a[20][20],x,d[20];
    int i,j,razmer,k=0,p=0,b;;
    fw=fopen("log.txt","w");
    do
    {
        printf("vvedite razmer matrici (maximum 20):\n");
        scanf("%d",&razmer);
    }
    while (razmer>20 || razmer<1);
    printf("\n");
    fr=fopen("input.txt","r");
    for (i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            fscanf (fr, "%lf", &a[i][j]);
        }
    }
    fclose(fr);
    printf ("\n Matrix: \n");
    fprintf (fw,"Matrix: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
for (i=0;i<razmer;i+=2)
   for(j=0;j<razmer;j++)
{
{
  if (a[i][j]<0)
  {            
d[k]=a[i][j];
  k++;
}
}
for(b=0;b<k-1;b++)
{
for (p=0; p<k; p++)
if (d[p]>d[p+1])
{
x=d[p];
d[p]=d[p+1];
d[p+1]=x;
}
}
p=0;
for(j=0;j<razmer;j++)
 if (a[i][j]<0)
{a[i][j]=d[p];
p++;
}
}
    printf ("\n Rezultat: \n");
    fprintf (fw,"Rezultat: \n");
    for(i=0; i<razmer; i++)
    {
        for (j=0; j<razmer; j++)
        {
            printf("%10.2lf", a[i][j]);
            fprintf(fw, "%10.2lf" , a[i][j]);
        }
        printf("\n");
        fprintf(fw, "\n");
    }
    getch();
}
ошибок при отладке не выдает
но когда программу запускаешь всякую шляпу пишет:

Matrix:
-2.00 -4.00 -6.00 5.00 -3.00
3.00 -7.00 9.00 -6.00 2.00
1.00 0.00 -5.00 9.00 -9.00
0.00 -3.00 2.00 -1.00 6.00
-7.00 3.00 5.00 2.00 -1.00
Rezultat:
-4.00 -2.0010712288987419048243000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00 5.0010713844874291198741000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00
3.00 -7.00 9.00 -6.00 2.00
1.00 0.00 -4.00 9.00 -2.00
0.00 -3.00 2.00 -1.00 6.00
-7.00 3.00 5.00 2.00 -4.00
Yandex
Объявления
08.01.2010, 21:46     Сортировка отрицательных чисел нечетных строк
Ответ Создать тему
Опции темы

Текущее время: 17:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru