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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2017, 00:45   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Удалить элементы двумерного массива си

Добрый вечер. Нужно удалить элементы двумерного массива, которые меньше числа first
Код:
for(int i=0;i<N;i++)
	{
		size=N;
		for(int j=0;j<N;j++)
		{	
			if(mtx[i][j]<first)
			{
				 for(int ix = j; ix < size-1 ; ix++)
				 {
					   mtx[i][ix] = mtx[i][ix+1];
				 }
				
				 size--;
				 s[k]=size;
			
			}
		}
		 
		k++;
	}



	k=0;
	printf("Your matrix after deleting\n");
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<s[k];j++)
			printf("%f\t",mtx[i][j]);
		printf("\n");
		k++;
	}
Подскажите пожалуйста, почему когда новая строка начинается с числа,которое следует удалить, удаление происходит неверно?
Вероника99 вне форума Ответить с цитированием
Старый 14.12.2017, 14:47   #2
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Не подскажете?Я так и не поняла, почему удаление ненужных чисел происходит не во всех случаях?
Вероника99 вне форума Ответить с цитированием
Старый 14.12.2017, 15:25   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

выложите полный текст программы. массив s[] где задаётся?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.12.2017, 15:39   #4
gantzboss
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Вероника99 Посмотреть сообщение
size-1
может проблема в этом
gantzboss вне форума Ответить с цитированием
Старый 14.12.2017, 15:51   #5
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define N 3



int main()
{
	int size=N;
	float **mtx = (float **)malloc(N * sizeof(float *));
	for(int i=0;i<N;i++)
		 mtx[i] = (float *)malloc(N* sizeof(float));
	
	printf("Enter elements to matrix\n");
	for(int i=0;i<N;i++)
			for(int j=0;j<N;j++)
				scanf("%f",&mtx[i][j]);

	
	printf("Your matrix\n");
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<N;j++)
			printf("%f\t", *(*(mtx + i) + j) );
		printf("\n");
	}

	float first=mtx[0][0];
	int s[N],k=0;
	printf("First element = %f\n",first);

	for(int i=0;i<N;i++)
	{
		size=N;
		for(int j=0;j<N;j++)
		{	
			if(mtx[i][j]<first)
			{
					
				 for(int ix = j; ix < size-1 ; ix++)
				 {
					
					   mtx[i][ix] = mtx[i][ix+1];
				 }
				 size--;
				 s[k]=size;
			
			}
		
		}
		 
		k++;
	}
	
	k=0;
	printf("Your matrix after deleting\n");
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<s[k];j++)
			printf("%f\t",mtx[i][j]);
		printf("\n");
		k++;
	}
	
	return 0;
}
Вероника99 вне форума Ответить с цитированием
Старый 14.12.2017, 15:53   #6
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Цитата:
Сообщение от gantzboss Посмотреть сообщение
может проблема в этом
Пробовала по-разному: и size-1, и size, и int ix = j-1; и т.д. Ничего не помогало
Вероника99 вне форума Ответить с цитированием
Старый 14.12.2017, 16:02   #7
gantzboss
Пользователь
 
Регистрация: 02.11.2017
Сообщений: 31
По умолчанию

может надо удалять первый элемент?
хотя нет он первым проходом удаляет

Последний раз редактировалось gantzboss; 14.12.2017 в 16:09.
gantzboss вне форума Ответить с цитированием
Старый 14.12.2017, 16:33   #8
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Мне уже подсказали,надо было заменить цикл
Код:
for(int j=0;j<N;j++) 
на 
for(int j = N - 1; j >= 0; j--)
и s[k]=size; добавить после if.
Вероника99 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Просуммировать элементы двумерного массива NxM Фима Общие вопросы Delphi 1 08.12.2015 13:53
Фортран. Удалить из массива нулевые элементы, передвинув на их место следующие элементы без нарушения порядка.. katya2.5 Помощь студентам 0 27.12.2013 21:01
Как обнулить элементы строки двумерного массива, содержащей наибольшее количество элементов одномерного массива griignat Помощь студентам 1 22.11.2011 20:04
Ввести элементы динамического двумерного массива Alexeytur Помощь студентам 1 28.01.2011 10:01
Максимальные элементы двумерного массива Jasper92 Общие вопросы C/C++ 0 17.12.2009 15:23