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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2009, 00:20   #1
bars1984
Пользователь
 
Регистрация: 10.05.2009
Сообщений: 32
По умолчанию задача на матрицу(Си)

Прверить, если в матрице хотя бы одна строка, содерж. отриц. элемент, и найти ее номер.Все элементы столбца с таким же номером уменьшить в два раза.

пожалуйста проверьте,где в программе ошибка?


Код:
#include <stdio.h>

int main()
{
	int n, m, i, j, k, p;
	int a[20][20];

	printf("Enter n:");
	scanf("%d", &n);

	printf("Enter m:");
	scanf("%d", &m);

	for(i=0;i<n;i++)
	{
		for(j=0; j<m; j++)
			scanf("%d", &a[i][j]);
	}

	p=-1;
	i=0;
	while(i<n){
		k=0;
		j=0;
		while(j<m){
			if(a[i][j]<0)
				k=1;
			j++;
		}
		if(k==0 && p==-1)
			p=i;
		i++;
	}
	if(p==-1)
		printf("Vse stroki pol\n");
	else
		i=0;
		while(i<n){
			k=p;
				a[i][k]=(a[i][k])/2;
			j++;
		}
		
	for(i=0; i<n; i++)
 {
  for(j=0; j<m; j++)
   printf("%4d",a[i][j]);
  printf("\n");
 }
	return 0;
}
bars1984 вне форума Ответить с цитированием
Старый 20.05.2009, 01:13   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Зачем вы используете while там, где просто просится for?
Код:
#include <stdio.h>
#include <conio.h>

int main()
{
	int n, m, i, j, k, p;
	int a[20][20];

	printf("Enter n:");
	scanf("%d", &n);

	printf("Enter m:");
	scanf("%d", &m);

	for(i=0;i<n;i++)
	{
		for(j=0; j<m; j++)
			scanf("%d", &a[i][j]);
	}

	p=-1;
	for(i=0; i<n; i++)
           {
		k=0;
		for(j=0; j<m; j++)
			if(a[i][j]<0)	k=1;
		if(k==1 && p==-1)     // <<<<<----------ошибка была тут
			p=i;
	}

	if(p==-1)
		printf("Vse stroki pol\n");
	else
		for(i=0;i<n;i++)
		a[i][p]=(a[i][p])/2;

	for(i=0; i<n; i++)
 {
  for(j=0; j<m; j++)
   printf("%4d",a[i][j]);
  printf("\n");
 }
 getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 20.05.2009, 19:12   #3
bars1984
Пользователь
 
Регистрация: 10.05.2009
Сообщений: 32
По умолчанию

объясните мне пожалуйста, что выполняется в каждой строчке этой функции

Код:
void Enquenue(Spis **begin)  
{
Spis *p,*tmp;
p=new Spis;  
p->number=0;
p->next=NULL;
*begin = p;

for(int i=1; i<10; i++)
 {
  tmp = new Spis;
  p->next = tmp;
  tmp->next = NULL;
  tmp->number = i;
  p = p->next;
 }
}
bars1984 вне форума Ответить с цитированием
Старый 20.05.2009, 19:24   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Так а что за функция? Откуда взялась?
И как это связано с этой темой?

Похоже на создание 10-ти элементов списка.
Поля number инициализируется числами от 0 до 9. Полю next присваивается указатель на следующий элемент.

В общем, создаем и заполняем стек.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 20.05.2009, 20:12   #5
bars1984
Пользователь
 
Регистрация: 10.05.2009
Сообщений: 32
По умолчанию

пожалуйста напишите блок-схему на следующую программу

большое спасибо!

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

typedef struct Spis {  // структура элементов списка
int number;            // данные для запоминания
struct Spis *next;     // указатель на следующий элемент
} Spis;
	
		/*  описание функций  */
void Enquenue(Spis**); // поставить элемент в очередь
void Display(Spis*);   // отобразить содержимое очереди
void GetNewSpis(Spis**, Spis*);   // создание нового списка


int main()
{
Spis *begin=NULL; //указатель на вершину
Spis *newspis,*p; //указатели на новый список и текущий элемент

Enquenue(&begin);  //вызов функции
Display(begin);    //вызов функции
printf("\n New Spis:\n"); //вывести новый список
newspis = new Spis;       //выделение памяти для списка
p = newspis;        //
GetNewSpis(&newspis, begin);
delete[] newspis;    //освобождение памяти
newspis = NULL;
Display(p);

getch();
}

void Enquenue(Spis **begin)  //определение функции
{
Spis *p,*tmp;
p=new Spis;  // захват памяти под первый элемент
p->number=0; // указываем на то,что список пуст
p->next=NULL;
*begin = p;  //вершина переносится на первый элемент

for(int i=1; i<10; i++)
 {
  tmp = new Spis;  //захват памяти под второй элемент
  p->next = tmp;
  tmp->next = NULL;
  tmp->number = i;
  p = p->next;
 }
}

void Display(Spis *begin) //определение функции
{
Spis *p= begin;
if(p==NULL)
 printf("Queueis empty");
else
 printf("Queue");
while(p!=NULL)
 {
 printf("\n%d", p->number);  //напечатать список
 p=p->next;
 }
}

void GetNewSpis(Spis **nsp, Spis *p) //определение функции
{
 if(!p) return;
 Spis *g;
 GetNewSpis(nsp, p->next);
 (*nsp)->number = p->number;
 (*nsp)->next = new Spis;
 (*nsp)->next->next = NULL;
 (*nsp) = (*nsp)->next;
}
bars1984 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на матрицу jorjinho10 Паскаль, Turbo Pascal, PascalABC.NET 0 28.04.2009 19:55
задача на матрицу в паскале innaa639 Помощь студентам 2 10.04.2009 17:02
Задача на квадратную матрицу.. Razorishe Помощь студентам 4 17.03.2009 08:52
Задача на матрицу. Fest Помощь студентам 2 16.12.2007 05:54