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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2011, 17:00   #1
ensoleille
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 25
Восклицание добавление новых строк в динамическую матрицу.

Дана матрица размера M х N и целое число K (1 <= K <= M). Перед строкой матрицы с номером K вставить 3 строки из 1.

пробывала так.но что-то не сложилось и выводит оно три строки из единиц то после,то не выводит несколько строк матрицы.и выдает ошибку постоянно

Код:
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<stdlib.h>

void main()
{
	int **a;
	int M,N,i,j,K;
	puts("Vvedite kolichesto strok - M");
	scanf("%d",&M);
	puts("Vvedite kolichestvo stolbtcov - N");
	scanf("%d",&N);
	a=(int**)malloc(M*sizeof(int*));
		for(i=0;i<M;i++)
			*(a+i)=(int*)malloc(N*sizeof(int));
	for(i=0;i<M;i++)
	for(j=0;j<N;j++)
	a[i][j]=rand()%20-1;
	for(i=0;i<M;i++)
	{
		for(j=0;j<N;j++)
			printf("%4d",a[i][j]);
			puts("\n");
	}
	puts("Vvedite chislo K ( K >= 1 && K <= M )");
	scanf("%d",&K);
	puts("\n");
	for (i=K-1;i<M+3;i++)
		{
			if (i==K+K)
				{
					for (int u=0;u<3;u++)
					{	for (int y=0;y<N;y++)
				printf("   1");
				puts("\n");}
				}
			for (j=0;j<N;j++)
			printf("%4d",a[i][j]);
			puts("\n");
		}
}
еще была попытка вставить еще один динамический массив из единиц.но тщетно-ошибку выдавало буквально сразу после вывода исходной матрицы на экран и ввода числа К

подскажите что не так в этом коде то?

Последний раз редактировалось ensoleille; 17.01.2011 в 17:11.
ensoleille вне форума Ответить с цитированием
Старый 17.01.2011, 17:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вставить 3 строки из 1.
Откуда откуда???
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2011, 17:15   #3
ensoleille
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 25
По умолчанию

ну просто вставить три строки из единиц перед строкой с номером K
тоесть выходит массив из единиц.я же по-другому сделала.ну,пыталась сделать
ensoleille вне форума Ответить с цитированием
Старый 17.01.2011, 17:31   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так. Массивы ты создавать судя по всему умеешь. Вот значит создай еще один массив, где строк будет на 3 больше.
А потом перепиши в новый массив
Код:
i=0;
// Наполняем новый массив из старого до к-той строки
for(;i<k;i++)  for(int j=0;j<n;j++) b[i][j]=a[i][j];
// Далее дописываем три строки единиц
for(int e=0;e<3;e++)  for(int j=0;j<n;j++) b[i+e][j]=1;
// и дописываем остальное из массива
for(;i<m;i++)  for(int j=0;j<n;j++) b[i][j]=a[i][j];
Идея понятна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.01.2011, 17:31   #5
ensoleille
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 25
По умолчанию

ну где то выглядеть матрица так.при К=1

5 4 3 2
1 1 1 1
1 1 1 1
1 1 1 1
6 7 8 1
7 2 3 4
ensoleille вне форума Ответить с цитированием
Старый 17.01.2011, 17:35   #6
ensoleille
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 25
По умолчанию

да,сейчас попробую)
ensoleille вне форума Ответить с цитированием
Старый 17.01.2011, 18:44   #7
ensoleille
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 25
По умолчанию

Код:
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<stdlib.h>

void main()
{
	int **a,**b;
	int M,N,i,j,K,e;
	puts("Vvedite kolichesto strok - M");
	scanf("%d",&M);
	puts("Vvedite kolichestvo stolbtcov - N");
	scanf("%d",&N);
	a=(int**)malloc(M*sizeof(int*));
		for(i=0;i<M;i++)
			*(a+i)=(int*)malloc(N*sizeof(int));
	for(i=0;i<M;i++)
	for(j=0;j<N;j++)
	a[i][j]=rand()%20-1;
	for(i=0;i<M;i++)
	{
		for(j=0;j<N;j++)
			printf("%4d",a[i][j]);
			puts("\n");
	}
	puts("\n\nVvedite chislo K ( K >= 1 && K <= M )");
	scanf("%d",&K);
	puts("\n");
	b=(int**)malloc(M+3*sizeof(int*));
		for(i=0;i<M+3;i++)
			*(b+i)=(int*)malloc(N*sizeof(int));
	//çàïîëíåíèå íîâîãî ìàññèâà èç èñõîäíîãî äî ñòðîêè ïîä íîìåðîì Ê
	for(i=0;i<K;i++)
		for(int j=0;j<N;j++)
			b[i][j]=a[i][j];
	//äîïèñûâàíèå òðåõ ñòðîê èç åäèíèö
	for(e=0;e<3;e++)
		for(int j=0;j<N;j++)
			b[i+e][j]=1;
	// è îñòàâøåéñÿ ÷àñòè èñõîäíîãî ìàññèâà
	for(i=0;i<M;i++)
		for(int j=0;j<N;j++)
			b[i++][j++]=a[i][j++];
		printf("\n Noviy massiv : \n");
		for(i=0;i<M+3;i++)
			{	for(j=0;j<N;j++)
					{
						printf("%4d",b[i][j]);
					}
		puts(" \n");
			}
			
}
вот что выходить должно,так?

вроде выводит.даже единицы.но,во второй строке с единицами попадается еще и одно число не то.и в добавок не выводит строки после единиц

Последний раз редактировалось ensoleille; 18.01.2011 в 16:38.
ensoleille вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление новых возможностей в медлет neo4511 Общие вопросы по Java, Java SE, Kotlin 3 12.08.2010 11:29
Добавление новых полей к форме Gennady_fr Microsoft Office Access 6 09.05.2010 14:38
Сортировка списка при добавление новых значений dzv Microsoft Office Excel 13 28.01.2010 12:46
Qt. QSqlTableModel. Добавление новых строк. HIC Qt и кроссплатформенное программирование С/С++ 0 07.07.2009 16:31
Как создать динамическую матрицу? prikolist Общие вопросы C/C++ 2 16.04.2009 15:51