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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2020, 14:34   #31
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Alexalex777 Посмотреть сообщение
это ошибка я так понял
Это не ошибка, просто нужно писать не:
Код:
if (check(box, x, y) == 1)
    printf("MAX line and SMALL column.\n");
if (check(box, x, y) == 0)
    printf("no line and no small column.\n");
А:
Код:
k = check(box, x, y);
if (k == 1)
    printf("MAX line and SMALL column.\n");
if (k == 0)
    printf("no line and no small column.\n");
Чтобы 10 раз не вызывать функцию.
Цитата:
Сообщение от Alexalex777 Посмотреть сообщение
Или лучше просто сделать отдельные функции на поиск макс числа в строке и минимального в ряде?
Можно и 1 функцию, и 2 отдельные.
Код:
#include <stdio.h>
#define ROW 5
#define COL 5

enum {
    MIN_IN_COL = 1,
    MAX_IN_ROW = 2
};

void myprint(int box[][COL], int rows, int cols);
int check(int box[][COL], int x, int y);

int main(void)
{
    int box[ROW][COL] = {
        { 10,25,10,12,10 },
        { 60,70,80,90,10 },
        { 11,31,13,14,15 },
        { 16,33,18,19,20 },
        { 21,56,27,24,25 }
    };
    int x, y;
    myprint(box, ROW, COL);
    printf("Enter element row\n");
    scanf("%d", &x);
    printf("Enter element col\n");
    scanf("%d", &y);
    switch (check(box, x, y)) {
    case 0:
        printf("no MAX in row and no MIN in column\n");
        break;
    case MIN_IN_COL:
        printf("no MAX in row and MIN in column\n");
        break;
    case MAX_IN_ROW:
        printf("MAX in row and no MIN in column\n");
        break;
    case MIN_IN_COL | MAX_IN_ROW:
        printf("MAX in row and MIN in column\n");
    }
    return 0;
}

int check(int box[][COL], int x, int y)
{
    int i;
    int row_res = MAX_IN_ROW, col_res = MIN_IN_COL;
    for (i = 0; i < COL; i++)
        if (box[x][i] > box[x][y]) {
            row_res = 0;
            break;
        }
    for (i = 0; i < ROW; i++)
        if (box[i][y] < box[x][y]) {
            col_res = 0;
            break;
        }
    return col_res | row_res;
}

void myprint(int box[][COL], int rows, int cols)
{
    int i, j;
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
            printf("%d,", box[i][j]);
        printf("\n");
    }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 12.06.2020, 19:03   #32
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

BDA круто!! Спасибо большое!!
Alexalex777 вне форума Ответить с цитированием
Старый 12.06.2020, 21:33   #33
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

BDA перепроверил несколько раз не работают как надо прога.
Мне кажется i и j где то перепутаны. Единственное условие выполнения программа это i=1 j=0 25 .
Код:
#include <stdio.h>
#define ROW 5
#define COL 5
void myprint(int box[][COL], int rows, int cols);
int check(int box[][COL], int x, int y);
int main(void)
{
	int box[ROW][COL] = {
		{ 10,25,10,12,10 },
		{ 60,70,80,90,10 },
		{ 11,31,13,14,15 },
		{ 16,33,18,19,20 },
		{ 21,56,27,24,25 }
	};
	int x, y;
	myprint(box, ROW, COL);
	printf("Enter element row\n");
	scanf("%d", &x);
	printf("Enter element col\n");
	scanf("%d", &y);
	if (check(box, x, y)==1)
		printf("MAX in row and MIN in column\n");
	else
		printf("no MAX in row or no MIN in column\n");
	return 0;
}
int check(int box[][COL], int x, int y)
{
	int i;
	for (i = 0; i < COL; i++)
		if (box[x][i] > box[x][y])
			return 0;
	for (i = 0; i < ROW; i++)
		if (box[i][y] < box[x][y])
			return 0;
	return 1;
}
void myprint(int box[][COL], int rows, int cols)
{
	int i, j;
	for (i = 0; i < ROW; i++)
	{
		for (j = 0; j <COL; j++)
			printf("%d,", box[i][j]);
		printf("\n");
	}
}
Alexalex777 вне форума Ответить с цитированием
Старый 12.06.2020, 21:48   #34
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

как и думал))Поменял местами ввод x и y ,и все работает))

Последний раз редактировалось Alexalex777; 12.06.2020 в 23:29.
Alexalex777 вне форума Ответить с цитированием
Старый 19.06.2020, 00:01   #35
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Новая задача
Функция принимает двухмерный массив с однозначными числами и пишет сколько чисел и каких находятся в массиве.
Получилось сосчитать количество чисел и их наименования только в одномерном массиве строк.в двухмерном не выходит.
1--
Код:
#include<stdio.h>
#define size 4
int check(int box[][size],int bb[])
{
	int i,j;
	for (i = 0; i < size; i++)
		for (j = 0; j < size; j++)
		bb[10] = box[size][size];
	//bb[box]++;
	for (i = 0; i < 10; i++)
	{
		printf("num=%d->%d \n", i, bb[i]);
		//print("%d \n", bb[box]);
			//return 0;
	}
}
	void main(void)
	{
		int box[][size] = { {1,2,3,4},
	{5,6,7,8},
	{9,0,7,7},
	{1,2,7,4} }, bb[10];
		//bb[10] = { 0 };
		check(box,bb);
		//printf("%d", check(box,bb));
	}
2
Код:
#include <stdio.h>
int main(void)
{
	char a[] = "111678900554";
	int i = 0, num[9] = { 0 };  
	while (a[i] != '\0')
	{
		num[a[i] - 48]++;
		i++;
	}
	for (i = 0; i<10; i++)
		printf("\n%c--%d\n", i + 48,num[i]);
	return 0;
}

Последний раз редактировалось Alexalex777; 19.06.2020 в 00:04.
Alexalex777 вне форума Ответить с цитированием
Старый 19.06.2020, 01:42   #36
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

По 1 коду: просто внутри двойного цикла делать bb[box[i][j]]++; и не забыть инициализировать элементы массива bb нулем.
По 2 коду: num[10] должно быть, так как всего 10 цифр; можно печатать printf("%d--%d\n", i, num[i]);.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 19.06.2020 в 01:46.
BDA вне форума Ответить с цитированием
Старый 19.06.2020, 03:18   #37
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Спасибо!! Получилось
Код:
#include<stdio.h>
#define size 4
#define s 10
int check(int box[][size], int bb[s])
{
	int i, j;
	for (i = 0; i < size; i++)
		for (j = 0; j < size; j++)
			bb[box[i][j]]++;
		for (i = 0; i < 10; i++)
			printf("num=%d->%d \n", i, bb[i]);
	}
void main(void)
{
	int box[][size] = { { 1,2,3,4 },
	{ 5,6,7,8 },
	{ 9,0,7,7 },
	{ 1,2,7,4 } }, bb[s] = { 0 };
	check(box,bb);
}
Alexalex777 вне форума Ответить с цитированием
Старый 21.06.2020, 05:38   #38
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Необычная задача надо заполнить в матрице 5Х5 цифрами в той же матрице площадь 4Х4.Программа должна достроить ряд из максимальных чисел каждой строки и строку с минимальными числами находящихся в каждом из рядов.
Несколько строк программа считает ряды нет.Должна быть строка 12 10 11 5 ряд 70 93 84 60
Код:
#include<stdio.h>
void main(void)
{
	int a[5][5] = { { 12,37,70,5 },
	{ 93,10,11,83 },
	{ 12,35,66,84 },
	{ 30,60,50,9 } };	
		int i, j, max, min;
	//printf("\n Enter matrix 5X5:\n");
	//for (i = 0; i < 4; i++)
	//{
		//for (j = 0; j < 4; j++)
		//	scanf("%d\n", a[i][j]);
			max = a[0][0];
			min = a[0][0];
	//}
			for (i = 0; i < 4; i++)
			{
				for (j = 0; j < 4; j++)
					if (a[i][j] > max)
					{
						max = a[i][j];
						a[i][4] = max;
					}
				if (a[i][j] < min)
				{
					min = a[i][j];
					a[4][j] = min;
				}
			}
		for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
			printf("%d   ", a[i][j]);
		printf("\n");
	}
}

Последний раз редактировалось Alexalex777; 21.06.2020 в 05:43.
Alexalex777 вне форума Ответить с цитированием
Старый 21.06.2020, 14:57   #39
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
#include <stdio.h>

void main(void)
{
    int a[5][5] = {
        { 12,37,70,5 },
        { 93,10,11,83 },
        { 12,35,66,84 },
        { 30,60,50,9 }
    };
    int i, j;
    for (i = 0; i < 4; i++)
    {
        a[i][4] = a[i][0];
        a[4][i] = a[0][i];
        for (j = 1; j < 4; j++)
        {
            if (a[i][j] > a[i][4])
                a[i][4] = a[i][j];
            if (a[j][i] < a[4][i])
                a[4][i] = a[j][i];
        }
    }
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5 - (i == 4); j++)
            printf("%4d", a[i][j]);
        printf("\n");
    }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 21.06.2020, 15:30   #40
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Спасибо!
Alexalex777 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двухмерные массивы yusef95 Помощь студентам 1 09.06.2013 22:12
ДВУХМЕРНЫЕ МАССИВЫ Pandemona18 Паскаль, Turbo Pascal, PascalABC.NET 1 31.03.2011 20:39
Двухмерные массивы lilia2121 Помощь студентам 0 25.05.2010 10:37
про двухмерные массивы alexov Общие вопросы C/C++ 7 07.12.2008 21:03
Двухмерные массивы (С++) Nattka Помощь студентам 2 04.12.2008 21:15