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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2016, 13:20   #1
uppjke
 
Регистрация: 26.10.2016
Сообщений: 8
По умолчанию Перевод с Си++ на Си и добавление функций в код

Вот мой код:
Код:
#include <iostream>
using namespace std;
*
int main()
{
* * const int n = 2;
* * const int m = 3;
* * bool flag = false;
* * int mas[n][m];
* * int stb, str, min, max;
* * ********************************************************************
* * cout << "Enter the matrix:\n";
* * for(int i = 0; i < n; i++)
* * {
* * * * for(int j = 0; j < m; j++)
* * * * {
* * * * * * cout << "Enter the matrix element [" << i+1 << "] [" << j+1 << "]: ";
* * * * * * cin >> mas[i][j];
* * * * }
* * }
*************************************************************************
* * cout << "\n\nYour matrix:\n";
* * for(int i = 0; i < n; i++)
* * {
* * * * for(int j = 0; j < m; j++)
* * * * {
* * * * * * cout << mas[i][j];
* * * * * * cout << "\t";
* * * * }
* * * * cout << "\n";
* * }
***********************************************************************************
* * for(int i = 0; i < n; i++)
* * {
* * * * for(int j = 0; j < m; j++)
* * * * {
* * * * * * if(mas[i][j] < 0)
* * * * * * {
* * * * * * * * int sum = 0;
* * * * * * * * for(int k = 0; k < m; k++)
* * * * * * * * {
* * * * * * * * * * sum += mas[i][k];
* * * * * * * * }
* * * * * * * * cout << "\nAmount of line items [" << i+1 << "] = " << sum << endl;
* * * * * * }
* * * * }
* * }
******************************************************************************
* * for(int i = 0; i < n; i++)
* * {
* * * * stb = 0;
* * * * min = mas[i][0];
* * * * for(int j = 0; j < m; j++)
* * * * {
* * * * * * if(mas[i][j] <= min)
* * * * * * {
* * * * * * * * min = mas[i][j];
* * * * * * * * stb = j;
* * * * * * }
* * * * }
* * * * str = 0;
* * * * max = mas[0][stb];
* * * * for(int k = 0; k < n; k++)
* * * * {
* * * * * * if(max <= mas[k][stb])
* * * * * * {
* * * * * * * * str = k;
* * * * * * * * max = mas[k][stb];
* * * * * * * * if(min == max)
* * * * * * * * {
* * * * * * * * * * cout << "i = " << str << " j = " << stb << "\nSaddle point = " << mas[str][stb] << endl;
* * * * * * * * * * flag = true;
* * * * * * * * }
* * * * * * }
* * * * }
* * }
* * if(flag == false)
* * {
* * * * cout << "\nNo saddle points\n\n" << endl;
* * }
****************************************************************************************
}
Не знаю, как перевести на Си и не умею писать функции. Спасите! А то сдавать на следующей неделе!

Последний раз редактировалось uppjke; 06.11.2016 в 13:51.
uppjke вне форума Ответить с цитированием
Старый 06.11.2016, 13:35   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Чтобы ввести функцию (функции) в код нужно сначала разбить программу на логические куски и пояснить что делает каждый, а потом решать что можно в функцию упаковать, а что - нет. Например:
Код:
* * const int n = 2;
* * const int m = 3;
* * bool flag = false;
* * int mas[n][m];
Этот кусок кода описывает все переменные, которые потребуются в программе дальше. Его нельзя "переводить в функцию". И т.д.

Сделай это (для начала).
ura_111 вне форума Ответить с цитированием
Старый 06.11.2016, 13:53   #3
uppjke
 
Регистрация: 26.10.2016
Сообщений: 8
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Чтобы ввести функцию (функции) в код нужно сначала разбить программу на логические куски и пояснить что делает каждый, а потом решать что можно в функцию упаковать, а что - нет. Например:
Код:
* * const int n = 2;
* * const int m = 3;
* * bool flag = false;
* * int mas[n][m];
Этот кусок кода описывает все переменные, которые потребуются в программе дальше. Его нельзя "переводить в функцию". И т.д.

Сделай это (для начала).
Вот я звёздами отчеркнул на части
1. Это пользователь вводит матрицу
2. Показывает матрицу
3. Считает сумму строки в которой есть хотябы 1 отр. элем.
4. Седловые точки
uppjke вне форума Ответить с цитированием
Старый 06.11.2016, 14:17   #4
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,529
По умолчанию

Замени cout на printf.
Замени cin на scanf.
Потом посмотри, что получится. И будет тебе C.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Старый 06.11.2016, 14:20   #5
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,529
По умолчанию

Ещё надо убрать в начале первые две строки и заменить их на
Код:
#include <stdio.h>
, а также все объявления переменных "int i, j;" перенести из циклов в начало программы, чтобы не морочить голову компилятору.
Исправь и проверь.

Булевую переменную замени на целую {0, 1}.
А функции писать не надо, ни к чему это.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...

Последний раз редактировалось jura_k; 06.11.2016 в 14:23.
jura_k вне форума Ответить с цитированием
Старый 06.11.2016, 14:22   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Похоже, что вот этот кусок можно перенести в функцию:

Код:
******************************************************************************
* * for(int i = 0; i < n; i++)
* * {
* * * * stb = 0;
* * * * min = mas[i][0];
* * * * for(int j = 0; j < m; j++)
* * * * {
* * * * * * if(mas[i][j] <= min)
* * * * * * {
* * * * * * * * min = mas[i][j];
* * * * * * * * stb = j;
* * * * * * }
* * * * }
* * * * str = 0;
* * * * max = mas[0][stb];
* * * * for(int k = 0; k < n; k++)
* * * * {
* * * * * * if(max <= mas[k][stb])
* * * * * * {
* * * * * * * * str = k;
* * * * * * * * max = mas[k][stb];
* * * * * * * * if(min == max)
* * * * * * * * {
* * * * * * * * * * cout << "i = " << str << " j = " << stb << "\nSaddle point = " << mas[str][stb] << endl;
* * * * * * * * * * flag = true;
* * * * * * * * }
* * * * * * }
* * * * }
* * }
* * if(flag == false)
* * {
* * * * cout << "\nNo saddle points\n\n" << endl;
* * }
****************************************************************************************

Только я не понимаю как передать 2- мерный массив в функцию? В смысле я бы его сделал динамической памятью (и тогда передал бы просто ссылку на него)... А вы такое проходили? Или лучше саму матрицу сделать глобальной - чтобы поле видимости её было и в main() и в функции (что-то типа того: в main заполнилось, а в функции обработалось)?... Или заполнять массив, желательно, тоже в отдельной функции нужно?

Пиши, что ты думаешь по этому поводу?
ura_111 вне форума Ответить с цитированием
Старый 06.11.2016, 15:07   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Т.к. ты молчишь, то я сделал массив глобальным:


Код:
#include <stdio.h>

 int n = 2;
 int m = 3;
 int mas[2][3];
 
 int Saddle()
 {
	 int i, j, k;
	 int flag = 0;
	 int stb, str, min, max;

	 for (i = 0; i < n; i++)
	 {
		 for (j = 0; j < m; j++)
		 {
			 if (mas[i][j] < 0)
			 {
				 int sum = 0;
				 for (k = 0; k < m; k++)
				 {
					 sum += mas[i][k];
				 }
				 printf("\nAmount of line items [%d]= %d\n", i + 1, sum);
			 }
		 }
	 }

	 for (i = 0; i < n; i++)
	 {
		 stb = 0;
		 min = mas[i][0];
		 for (j = 0; j < m; j++)
		 {
			 if (mas[i][j] <= min)
			 {
				 min = mas[i][j];
				 stb = j;
			 }
		 }
		 str = 0;
		 max = mas[0][stb];
		 for (k = 0; k < n; k++)
		 {
			 if (max <= mas[k][stb])
			 {
				 str = k;
				 max = mas[k][stb];
				 if (min == max)
				 {
					 printf("i =%d j =%d \nSaddle point = %d\n", str, stb, mas[str][stb]);
					 flag = 1;
				 }
			 }
		 }
	 }
	 if (flag == 0)
	 {
		 printf("\nNo saddle points\n\n\n");
	 }
	 return 0;
 }
 
int main()
{
	int i, j;
	printf("Enter the matrix:\n");
	for(i = 0; i < n; i++)
	{
		for(j = 0; j < m; j++)
		{
			printf("Enter the matrix element [%d][%d]: ", i + 1, j + 1);
			scanf("%d", &mas[i][j]);
		}
	}
	printf("\n\nYour matrix:\n");
	for(i = 0; i < n; i++)
	{
		for(j = 0; j < m; j++)
		{
			printf("%d\t", mas[i][j]);
		}
		printf("\n");
	}
	int Saddle();	
	return 0;
}

Смотри, я программу особо не тестировал; твоя задача - хорошенько её протестировать... Если что - поправлю... Если у тебя нет компилятора, тогда можешь использовать онлайн:

http://www.tutorialspoint.com/codingground.htm


.
ura_111 вне форума Ответить с цитированием
Старый 06.11.2016, 22:24   #8
uppjke
 
Регистрация: 26.10.2016
Сообщений: 8
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Т.к. ты молчишь, то я сделал массив глобальным:


Код:
#include <stdio.h>

 int n = 2;
 int m = 3;
 int mas[2][3];
 
 int Saddle()
 {
	 int i, j, k;
	 int flag = 0;
	 int stb, str, min, max;

	 for (i = 0; i < n; i++)
	 {
		 for (j = 0; j < m; j++)
		 {
			 if (mas[i][j] < 0)
			 {
				 int sum = 0;
				 for (k = 0; k < m; k++)
				 {
					 sum += mas[i][k];
				 }
				 printf("\nAmount of line items [%d]= %d\n", i + 1, sum);
			 }
		 }
	 }

	 for (i = 0; i < n; i++)
	 {
		 stb = 0;
		 min = mas[i][0];
		 for (j = 0; j < m; j++)
		 {
			 if (mas[i][j] <= min)
			 {
				 min = mas[i][j];
				 stb = j;
			 }
		 }
		 str = 0;
		 max = mas[0][stb];
		 for (k = 0; k < n; k++)
		 {
			 if (max <= mas[k][stb])
			 {
				 str = k;
				 max = mas[k][stb];
				 if (min == max)
				 {
					 printf("i =%d j =%d \nSaddle point = %d\n", str, stb, mas[str][stb]);
					 flag = 1;
				 }
			 }
		 }
	 }
	 if (flag == 0)
	 {
		 printf("\nNo saddle points\n\n\n");
	 }
	 return 0;
 }
 
int main()
{
	int i, j;
	printf("Enter the matrix:\n");
	for(i = 0; i < n; i++)
	{
		for(j = 0; j < m; j++)
		{
			printf("Enter the matrix element [%d][%d]: ", i + 1, j + 1);
			scanf("%d", &mas[i][j]);
		}
	}
	printf("\n\nYour matrix:\n");
	for(i = 0; i < n; i++)
	{
		for(j = 0; j < m; j++)
		{
			printf("%d\t", mas[i][j]);
		}
		printf("\n");
	}
	int Saddle();	
	return 0;
}

Смотри, я программу особо не тестировал; твоя задача - хорошенько её протестировать... Если что - поправлю... Если у тебя нет компилятора, тогда можешь использовать онлайн:

http://www.tutorialspoint.com/codingground.htm


.
Он компилируется без ошибок, но после вывода введенной матрицы, программа заканчивается и ни суммы ни седла нет, я твк понимаю глобальный массив тут не работает. Я думал что в функцию надо в функцию записывать именно действия с готовой матрицей, т.е. сумму эл-в и седловые точки и уже данные функции вызывать в мэйне. Не знаю что дальше и придумать. А по переводу на си я разобрался немного. И работу с дин памятью мы проходили, если ты про new и delete, плюс я так и не понял про адреса. Что-то с этим должно быть связано.
P.S. извиняюсь за молчание, в отъезде был
uppjke вне форума Ответить с цитированием
Старый 06.11.2016, 22:58   #9
uppjke
 
Регистрация: 26.10.2016
Сообщений: 8
По умолчанию

По поводу передачи массива в функцию, как раз с адресами и связана http://ru.stackoverflow.com/question...умерный-массив все равно не понятно
uppjke вне форума Ответить с цитированием
Старый 06.11.2016, 23:00   #10
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Быстро закрывается консоль - стандартная проблема.
Попробуй задержку сделать перед строчкой:
Код:
 return 0;
поставь какой-нибудь ввод переменной (обычно я использую getch, но для неё отдельную библиотеку подключать надо, а для scanf - нет). Понимаешь, чтобы ждало ввода пользователя перед закрытием.
ura_111 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевод в ASCII код и в двоичный код Randy.Mandy Microsoft Office Excel 0 27.02.2012 21:40
Крестики/нолики,добавление процедур и функций Plotonov Общие вопросы Delphi 3 15.04.2011 14:21
добавление процедур и функций garf_92 Помощь студентам 5 28.06.2010 21:00
Добавление функций в программу (Delphi) sv2311 Помощь студентам 1 10.04.2009 06:00
Перевод названий функций Rus-Eng??? Montana78 Microsoft Office Excel 2 15.06.2007 10:49