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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2010, 20:31   #1
ПеПпИ
 
Регистрация: 09.11.2010
Сообщений: 8
По умолчанию Ошибка в работе со строками, язык С

Дана целочисленная прямоугольная матрица. Определить:номера строк и столбцов всех седловых точек матрицы.
Матрица А имеет седловую точку Аij, если Аij является минимальным элементом в i-й строке и максимальным в j-м столбце.

После ввода матрицы программа выдаёт ошибку памяти и выходит.
Код:
#include "stdafx.h" 
int main(int argc, char* argv[]) 
{float a[3][3]; 
int st,i,j,z,flag; 
printf("vvedite matricy \n"); 
for(i=0;i<3;i++){ 
	for(j=0;j<3;j++){ 
		scanf("%f",&a[i][j]); }} 
float min;  
for(i=0;i<3;i++){ 
	flag=-1; min=a[i][0]; 
	for(j=0;j<3;j++) 
		if(a[i][j]<min) 
		{min=a[i][j]; 
		st=j; } 
		for(z=0;z<3;z++) 
			if(a[z][st]>min) 
			{flag=1; break; } 
			if(flag==-1) 
				printf("sedlo=%f stroka=%d stolbec=%d\n",min,i,st); } 
return 0; }
ПеПпИ вне форума Ответить с цитированием
Старый 18.11.2010, 01:24   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

вначале, в чем ваша ошибка
Цитата:
if(a[z][st]>min)
а st вас стоит в условии и может быть не определена, пройдитесь пошагово и увидите сразу

и вот вам работающий код на квадратную матрицу
(вводите сначала размерность матрицы, потом заполняете ее)
пример
Enter dimension matrix (это прога выводит)
4 (вводим размерность матрицы, т.е. матрица будет 4х4)
1 5 6 4 (заполняем матрицу через пробел числами)
7 8 9 2
6 4 5 9
2 3 4 7

(конкретно для этой матрицы седловых точек найдено не было)

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

#define newMatr(m, N) (m = (int *)calloc(N * N, sizeof(int))) // создаем матрицу размером N x N

int Min(int *m, int r, int N) {
  int i, j = 0, tmp;
  tmp = m[r * N];
  for (i = 0; i < N; i++) {
    if (tmp > m[r * N + i]) {
      tmp = m[r * N + i];
      j = i;
    }
  }
  return j;
}

int Max(int *m, int c, int N) {
  int i, tmp, j = 0;
  tmp = m[c];
  for (i = 0; i < N; i++) {
    if (tmp < m[i * N + c]) {
      tmp = m[i * N + c];
      j = i;
    }
  }
  return j;
}

int main() {
  int N, i, j, tmp;
  int *matr = NULL;
  printf("Enter dimension matrix\n");
  scanf("%u", &N);
  _flushall();
  newMatr(matr, N);
  if (matr) {
    for (i = 0; i < N; i++) { 
      for (j = 0; j < N; j++) { 
        scanf("%i", &matr[i * N + j]); 
      }
    }
    for (i = 0; i < N; i++) {
      tmp = Min(matr, i, N);
      if (Max(matr, tmp, N) == i)
        printf("sedlo = %i with coordinates [%u; %u]", matr[i * N + tmp], i, tmp);
    }
    free(matr);
  }
  printf("\n\n\tPress any key for exit...");
  _flushall();
  getchar();
  return 0; 
};
код возможно сложноват для новичка, но разобраться здесь можно)))
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками.Язык С Bella Помощь студентам 2 16.11.2009 18:01
Работа со строками (язык Си) Darh Помощь студентам 6 10.11.2009 19:07
Цикл do while при работе со строками. Lazio Помощь студентам 7 11.10.2009 16:11
Реализация функций Rexx по работе со строками в VBA tae1980 Microsoft Office Excel 19 17.03.2009 11:05
нужна помощь по работе с строками файлов... Ruffian Общие вопросы Delphi 9 15.11.2006 16:05