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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2011, 11:25   #1
Kompotiz
 
Регистрация: 22.09.2011
Сообщений: 6
Восклицание ДВУМЕРНЫЕ МАССИВЫ (СИ)

Дана целочисленная прямоугольная матрица. Определить:
1)сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент;
2)номера строк и столбцов всех седловых точек матрицы.
ПРИМЕЧАНИЕ:
Матрица А имеет седловую точку Аij, если Aij является минимальным элементом в i-й строке и максимальным в j-м столбце.
Код:
#include <stdio.h>
#include <conio.h>

int main()
{
const MAX_ELEMENTS = 4;
int m[MAX_ELEMENTS][MAX_ELEMENTS];
int sum=0,i,j,k=0,x,y,max=0,min=0;

FILE *in=fopen("in.txt","r");
clrscr();
printf("Massiv iz faila \n");
for (i = 0; i < MAX_ELEMENTS; i++) {
for (j = 0; j < MAX_ELEMENTS; j++){
fscanf(in,"%d", &m[i][j]);
printf("m[%d,%d]=%3d ", i,j,m[i][j]);
}
printf("\n");
}

for (i = 0; i < MAX_ELEMENTS; i++){
k=0;
for (j = 0; j < MAX_ELEMENTS; j++){
if (m[i][j]==0) k++;
if (m[i][j]<0)sum++;
}
if (k)
printf("\nSumma el-iv strok %d gde esti hoti 1 otrits element =%d",i,sum);

}
printf("\n\nSedovaia to4ka");

for (i = 0; i < MAX_ELEMENTS; i++){
	max=m[i][0]; x=0;
	for (j = 0; j < MAX_ELEMENTS; ++j)
		if (m[i][j]>max) {max=m[i][j]; x=j;}
	for (k = 0; k < MAX_ELEMENTS; k++)
		if (m[i][k]==m[i][x]){
		min=m[i][x];
		for (y = 0; y < MAX_ELEMENTS-i; y++)
			if (m[y][k]<min) min=m[y][k];
		if (min==max) printf("\nstolbik =%d stroka =%d ",j,i);
		}
}

getch();
return 0;

}
вместо суммы выдает кол-во... или вообще не понятные значения. в in.txt обычный массив..любые значения. подскажите что не так.
Kompotiz вне форума Ответить с цитированием
Старый 15.12.2011, 12:46   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,324
По умолчанию

Подсчёт суммы вот так работает:
Код:
    for (i = 0; i < MAX_ELEMENTS; i++){
        fnegative = 0;
        sum = 0;
        for (j = 0; j < MAX_ELEMENTS; j++){
            if (m[i][j] < 0) {
                fnegative = 1;
            }
            sum += m[i][j];
        }
        if (fnegative) {
            printf("\nSumma el-iv strok %d gde esti hoti 1 otrits element = %d", i, sum);
        }
    }
8Observer8 вне форума Ответить с цитированием
Старый 15.12.2011, 14:06   #3
Kompotiz
 
Регистрация: 22.09.2011
Сообщений: 6
По умолчанию

undefined symbol "fnegative"
что-то не так
Kompotiz вне форума Ответить с цитированием
Старый 15.12.2011, 14:10   #4
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Сообщение от Kompotiz Посмотреть сообщение
undefined symbol "fnegative"
что-то не так
Код:
int fnegative = 0;
Неужели так тяжело догадаться, что переменную просто надо объявить?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 15.12.2011, 14:14   #5
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,324
По умолчанию

Вот весь код:
Код:
#include <stdio.h>
#include <conio.h>

#define MAX_ELEMENTS 4

int main() {
    int m[MAX_ELEMENTS][MAX_ELEMENTS];
    int sum=0,i,j,k=0,x,y,max=0,min=0;
    int fnegative = 0;
    char* filename = "in.txt";
    FILE *in=fopen(filename, "r");

    if (in == NULL) {
        printf("error: can't open file \"%s\"", filename);
        return 1;
    }

    printf("Massiv iz faila:\n");
    for (i = 0; i < MAX_ELEMENTS; i++) {
        for (j = 0; j < MAX_ELEMENTS; j++){
            fscanf(in,"%d", &m[i][j]);
            printf("m[%d,%d] =%3d  ", i,j,m[i][j]);
        }
        printf("\n");
    }
    fclose(in);

    for (i = 0; i < MAX_ELEMENTS; i++){
        fnegative = 0;
        sum = 0;
        for (j = 0; j < MAX_ELEMENTS; j++){
            if (m[i][j] < 0) {
                fnegative = 1;
            }
            sum += m[i][j];
        }
        if (fnegative) {
            printf("\nSumma el-iv strok %d gde esti hoti 1 otrits element = %d", i, sum);
        }
    }

    printf("\n\nSedovaia to4ka");
    for (i = 0; i < MAX_ELEMENTS; i++){
        max = m[i][0];
        x = 0;
        for (j = 0; j < MAX_ELEMENTS; ++j)
            if (m[i][j] > max) {
                max = m[i][j];
                x = j;
            }
        for (k = 0; k < MAX_ELEMENTS; k++)
            if (m[i][k] == m[i][x]) {
                min = m[i][x];
                for (y = 0; y < MAX_ELEMENTS-i; y++)
                    if (m[y][k] < min)
                        min=m[y][k];
                    if (min==max)
                        printf("\nstolbik =%d stroka =%d ",j,i);
            }
    }

    getch();
    return 0;
}
P.S. Вот только "седловые точки я пока не посмотрел. Они у вас правильно выводятся?

Последний раз редактировалось 8Observer8; 15.12.2011 в 14:17.
8Observer8 вне форума Ответить с цитированием
Старый 15.12.2011, 14:15   #6
Kompotiz
 
Регистрация: 22.09.2011
Сообщений: 6
По умолчанию

я так и сделал с самого начала
странно...видимо что-т не так набрал)
Спасибо
Kompotiz вне форума Ответить с цитированием
Старый 16.12.2011, 22:33   #7
Kompotiz
 
Регистрация: 22.09.2011
Сообщений: 6
По умолчанию

Вот рабочий вариант. Если будут идеи по упрощению кода буду очень рад.
Код:
#include <stdio.h>
#include <conio.h>
int main()
{
    const    MAX_ELEMENTS = 4;
    int      m[MAX_ELEMENTS][MAX_ELEMENTS];
    int      sum=0,i,j,k=0,x,y,max=0,min=0;
    int fnegative = 0;
    FILE *in=fopen("in.txt","r");
    clrscr();
    printf("Massiv iz faila \n");
    for (i = 0; i < MAX_ELEMENTS; i++) {
	for (j = 0; j < MAX_ELEMENTS; j++){
	   fscanf(in,"%d", &m[i][j]);
	   printf("m[%d,%d]=%3d   ", i,j,m[i][j]);
	}
	printf("\n");
    }
    for (i = 0; i < MAX_ELEMENTS; i++){
	fnegative = 0;
	sum = 0;
	for (j = 0; j < MAX_ELEMENTS; j++){
	    if (m[i][j] < 0) {
		fnegative = 1;
	    }
	    sum += m[i][j];
	}
	if (fnegative)
	printf("\nSumma elementov v stroke %d gde esti hoti 1 otr el-ov =%d",i,sum);
    }
    printf("\n\nSedovaia to4ka");
    for (i = 0; i < MAX_ELEMENTS; i++){
	max=m[i][0]; x=0;
	for (j = 0; j < MAX_ELEMENTS; j++)
	   if (m[i][j] <= max) {max=m[i][j]; x=j;}//na6li maks v stroke
	for (k = 0; k < MAX_ELEMENTS; k++)
	   if (m[i][k]==m[i][x]){//esli maksim mnogo
	     min=m[i][x];
	     for (y = 0; y < MAX_ELEMENTS; y++)
		if (m[y][k]>min) min=m[y][k];
	     if (min==max) printf("\nstolbik =%d stroka =%d ",k,i);
	   }
    }
    getch();
    return 0;
}
Kompotiz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы M@rgo Помощь студентам 2 09.06.2011 13:53
Двумерные массивы Downtown Паскаль, Turbo Pascal, PascalABC.NET 0 06.04.2011 13:35
Двумерные массивы Nubik Помощь студентам 4 20.01.2010 22:54
ДВУМЕРНЫЕ МАССИВЫ QEEN Паскаль, Turbo Pascal, PascalABC.NET 3 03.04.2009 13:24
двумерные массивы Кирилл17 Помощь студентам 2 20.12.2008 01:33