Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Dr@gon
Зарегистрирован: 28.03.2005 Сообщения: 10 Откуда: Урал
|
Добавлено: Пн Мар 28 2005 08:05 Заголовок сообщения: уплотнение матрицы на Си, кто поможет |
|
|
нужно уплотнить матрицу если присутствует 0, массив вводим ручками
вот, кто допишет, кто поможет, плиз?
а то уже край, не могу сообразить...
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
{
clrscr(); // очистка экрана
int a=0;
int n=3, m=4; // объявление переменных
int *pa; // указатель на pa
int **paa=new int*[m]; // дин.выделение памяти под m
int *buf=new int;
for(int i=0;i<m;i++) // цикл выд.памяти для зап.массива
{
pa=new int[n];
paa[i]=pa;
} // конец
for(i=0;i<m;i++) // цикл заполнения массива с 0
for(int j=0;j<n;j++)
{
scanf("%d",&paa[i][j]);
} // конец
for(i=0; i<m; i++) // вывод массива
{
for (int j=0; j<n; j++) {
printf("%5d",paa[i][j]);
}
printf("\n");
}
printf("\n"); // конец вывода |
|
Вернуться к началу |
|
|
Dr@gon
Зарегистрирован: 28.03.2005 Сообщения: 10 Откуда: Урал
|
Добавлено: Пн Мар 28 2005 13:05 Заголовок сообщения: |
|
|
похоже никто
пытаюсь в матрице где ноль присутствует удалить эту строку и что-то не выходит |
|
Вернуться к началу |
|
|
tinimi
Зарегистрирован: 27.03.2005 Сообщения: 90 Откуда: Win32
|
Добавлено: Пн Мар 28 2005 22:59 Заголовок сообщения: |
|
|
Напишите что конкретно надо сделать. Что дано, что в результате.
Как уплотнять? если ноль, то ряд смещаем влево изаполням в конце 0?
Напиши все что надо полностью. _________________ [ TiNiMi ] |
|
Вернуться к началу |
|
|
Dr@gon
Зарегистрирован: 28.03.2005 Сообщения: 10 Откуда: Урал
|
Добавлено: Вт Мар 29 2005 06:31 Заголовок сообщения: |
|
|
Дана матрица, которую забиваем вручную, например:
1 4 7 5
4 6 0 7
4 6 1 2
нужно убрать строчку где присутствует 0 и должно получиться:
1 4 7 5
4 6 1 2
я находил строку с 0 и пробовал удалять delete paa[i,j]=0 , но он вместо той строчки не убирает ее, а заполняет всякями другими цифрами.
Не могу сообразить с алгоритмом, давно не программировал, лет 7 уже |
|
Вернуться к началу |
|
|
Ersh
Зарегистрирован: 20.01.2004 Сообщения: 107
|
Добавлено: Вт Мар 29 2005 10:54 Заголовок сообщения: |
|
|
Создай одномерный массив, размерность которого количество строк, которых надо удалить, а значения номера строк.(Пробегаемся по массиву, считаем количество строк, дальше выделяем память, опять пробегаемся и уже пишем номера строк в этот массив. Можно без динамических обойтись, еще проще.)
Дальше создаем другой массив с размерностью начальный массив минус количество строк. Пробегаемся по начальному массиву, пробегаемся по одномерному массиву, смотрим если номера строки нету в одномерном массиве, то пишем в новый массив(допустим буленовскую переменную для этого можно завести, то есть сначала в тру ее ставим, пробежались по второму массиву, если была строка, то переменную ставим в фолс.Дальше смотрим если переменная тру, то писать строку можно, если фалс, то там был 0). И все собственно, получим новый массив, уже "уплотненный". _________________ Анархия - мать порядка!!!!!!!!! |
|
Вернуться к началу |
|
|
Ersh
Зарегистрирован: 20.01.2004 Сообщения: 107
|
Добавлено: Вт Мар 29 2005 10:55 Заголовок сообщения: |
|
|
То есть мы не правим существующий массив, а создаем новый, в который пишем то, что нам надо. _________________ Анархия - мать порядка!!!!!!!!! |
|
Вернуться к началу |
|
|
Dr@gon
Зарегистрирован: 28.03.2005 Сообщения: 10 Откуда: Урал
|
Добавлено: Вт Мар 29 2005 12:41 Заголовок сообщения: спасибо |
|
|
огромное _________________ с Уважением к Вам |
|
Вернуться к началу |
|
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Чт Мар 31 2005 19:35 Заголовок сообщения: не разбрасывайтесь памятью -- она деньги стоит |
|
|
Вот алгоритм удаления пробелов из строки без копирования в дополнительный буфер:
Код: | char* alltrim(char* A) {
char *B=A;
char *C=A;
while(*B) if(*C++ != ' ') if(*B=C[-1])B++;
return A;
} |
Аналогии:
пробел -- строка с нулями
сравнение с пробелом -- проверка наличия нуля в строке
присваивание -- копирование одной строки в другую
инкремент указателя на символ -- инкремент указателя на строку
проверка указателя на пустой символ -- проверка общего конца строк
--------------------
не разбрасывайтесь памятью -- она деньги стоит |
|
Вернуться к началу |
|
|
|