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

Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] - C++

Восстановить пароль Регистрация
 
Anastasi95
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 15
09.07.2014, 21:34     Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] #1
удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c].

но в этом коде строчки по идеи не удаляются, а в 0-е превращаются, да и не ищет он элементы, помогите исправить

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
#include <iostream>
#include <stdafx.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
 
const int M = 3; // число строк
const int N = 2; // число столбцов
void main()
{
int i, j, A[M][N],b,c;
printf("vvedite b : \n");
scanf("%d", &b);
printf("vvedite c : \n");
scanf("%d", &c);
for ( i = 0; i < M; i ++ ) // цикл по строкам
for ( j = 0; j < N; j ++ ) // цикл по  столбцам строк
 
{
printf ("A[%d][%d]=", i, j); // подсказка для ввода
scanf ("%d", & A[i][j]); // ввод A[i][j]
}
 
 
printf("Матрица A\n");
for ( i = 0; i < M; i ++ )
{ // цикл по строкам
for ( j = 0; j < N; j ++ ) // вывод одной строки (в цикле)
printf ( "%4d", A[i][j] ); // 4 символа на число
printf("\n"); // переход на другую строку
}
;
for ( i = 0; i < M; i ++ ) // цикл по строкам
{
for ( j = 0; j < N; j ++ ) // цикл по  столбцам строк
{
    if ((A[i][0])<b && (A[i][0])>c)
   {
for (int a = N; a>j; a --) // передвигаем оставшиеся строки с конца 
for ( j = 0; j < M; j ++ ) 
A[a][j]=A[a-1][j];
for ( j = M; j <M; j ++ ) // обнуляем освободившуюся строку
A[i][j]=0;
break; // Дальше крутить не надо 
}
}
}
int Nnew=N;
if(i<N) // Значит строка нулей была вставлена
Nnew++;
printf("Матрица A\n"); 
for ( i = 0; i < Nnew; i ++ ) 
{ 
for ( j = 0; j < M; j ++ ) 
printf ( "%-9.3f", A[i][j] ); // вывод массива
printf("\n");
}
 
getch ();
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2014, 21:34     Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c]
Посмотрите здесь:

C++ Удалите из массива все элементы, первые цифры которых четные.
Разделить все элементы массива на его первый элемент C++
C++ Удалить все столбцы матрицы, в которых первый элемент больше последнего
C++ Массивы. Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат...
C++ Введите с клавиатуры число х и удалите из массива каждый элемент, делящийся нацело на х, а оставшиеся уплотните к началу массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
09.07.2014, 21:46     Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] #2
В этом примере ( кстати авторские права (С)zss ) вставляются строки,
а вам надо удалить столбец!
Подумайте, как поменяется код строк 34-48
Anastasi95
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 15
09.07.2014, 22:55  [ТС]     Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] #3
Добавлено через 45 секунд
zss, помогите, пожалуйста, подумать(
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
10.07.2014, 07:50     Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] #4
C++
1
2
3
4
5
6
7
8
9
10
11
int Mfact=M; // количество оставшихся столбцов 
for ( j = 0; j < Mfact; j ++ ) // ищем столбцы удовл. условию   x>b и x<c
{
    if ((A[0][j])>b && (A[0][j])<c)
    {
       for ( i = 0; i < N; i ++ ) // цикл по  строкам
           for (int j2 = j; j2<Mfact-1; j2++) // передвигаем оставшийся кусок строки 
                  A[i][j2]=A[i][j2+1];
      Mfact--;
   }
}
Anastasi95
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 15
10.07.2014, 08:26  [ТС]     Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] #5
zss, он обнуляет все, а матрицу транспонирует
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
10.07.2014, 08:55     Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот работающий код.
Внимательней смотрите на индексы строк и столбцов,
и если уж пользуетесь Сишными функциями ввода вывода,
то следите за спецификациями формата.
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
#pragma warning(disable:4996)
#include <iostream>
#include <locale>
using namespace std;
 
const int N = 3; // число строк
const int M = 3; // число столбцов
int main()
{
    setlocale(LC_ALL,"Rus");
    int i, j, A[N][M],b,c;
    printf("vvedite b : \n");
    scanf("%d", &b);
    printf("vvedite c : \n");
    scanf("%d", &c);
    for ( i = 0; i < N; i ++ ) // цикл по строкам
        for ( j = 0; j < M; j ++ ) // цикл по  столбцам
        {
            printf ("A[%d][%d]=", i, j); // подсказка для ввода
            scanf ("%d", & A[i][j]); // ввод A[i][j]
        }
    printf("Матрица A\n");
    for ( i = 0; i < N; i ++ )
    { // цикл по строкам
        for ( j = 0; j < M; j ++ ) // вывод одной строки (в цикле)
                printf ( "%4d", A[i][j] ); 
            printf("\n"); // переход на другую строку
    }
    int Mfact=M; // количество оставшихся столбцов 
    for ( j = 0; j < Mfact; j++ ) // ищем столбцы удовл. условию   x>b и x<c
    {
            if ((A[0][j])>b && (A[0][j])<c)
            {
                for ( i = 0; i < N; i ++ ) // цикл по  строкам
                    for (int j2 = j; j2<Mfact-1; j2++) // передвигаем оставшийся кусок строки 
                        A[i][j2]=A[i][j2+1];
                Mfact--;
            }
    }
    printf("Матрица A\n"); 
    for ( i = 0; i < N; i ++ ) 
    { 
            for ( j = 0; j < Mfact; j ++ ) 
                printf ( " %d", A[i][j] ); // вывод массива
            printf("\n");
    }
 
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2014, 09:36     Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c]
Еще ссылки по теме:

Используя объект — функцию, удалите из вектора все числа, синус которых меньше 0,5 C++
Разделить все элементы одномерного массива с четными номерами на первый элемент C++
C++ Удалить все столбцы, в которых первый элемент больше последнего

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

Или воспользуйтесь поиском по форуму:
Anastasi95
0 / 0 / 0
Регистрация: 09.07.2014
Сообщений: 15
10.07.2014, 09:36  [ТС]     Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c] #7
zss, Вы волшебник)
Yandex
Объявления
10.07.2014, 09:36     Удалите из массива A(n,m) все столбцы, в которых первый элемент принадлежит отрезку [b,c]
Ответ Создать тему
Опции темы

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