Показать сообщение отдельно
Старый 08.01.2014, 16:10   #1
Неактивный пользователь
 
Пол:Мужской
Регистрация: 19.03.2012
Сообщений: 1
Репутация: 0
По умолчанию Помогите перевести программу из С++ в Си

Добрый день.
В общем, есть задание:

Есть код на С++:
Код:
#include "windows.h"
#include "stdio.h"
#include "math.h"
#include <algorithm>
using namespace std;


#define MaxNumber 65535//Макс значение, которое могут ввести(мы ограничиваемся размером unsigned int)

int main(){
	int N;//Кол-во строк N(отсчёт от 1)
	int M;//Кол-во элементов M(отсчёт от 1)
	int EditNumber;//Насколько смещаем массив
	scanf("%d %d %d",&N,&M,&EditNumber);//вводим например "4 5 2"(как в примере)

	int **mass = new int*[N];
	for (int i = 0; i < N; i++) mass[i] = new int[M];
	/*Записываем в массивы наши числа*/
	for(int n=0; n<N;n++){
		printf("mass: %d\n",n);
		for(int m=0; m<M;m++){
			scanf("%d",&mass[n][m]);
		}
	}

	for(int n=0; n<N;n++){
		/*Находим id ячейки, где лежат макс и мин значения*/
		int max[2]={0,(-1*MaxNumber)};
		int min[2]={0,MaxNumber};//min[0] - id ячейки; min[1] - само число
		for(int m=0; m<M;m++){
			if(mass[n][m]<min[1]){
				min[1]=mass[n][m];
				min[0]=m;
			}
			if(mass[n][m]>max[1]){
				max[1]=mass[n][m];
				max[0]=m;
			}	
		}
		/*Сдвигаем если нужно наш массив*/
		if((int)fabs((float)(max[0]-min[0]))-1>1)//находим модуль разности и вычитам 1, если больше 1 смещаем массив направо на 2
			std::rotate(mass[n],mass[n]+(M-EditNumber),mass[n]+M);

	}
	/*Выводим массивы*/
	printf("======RETURN======");

	for(int n=0; n<N;n++){
		printf("\nmass:%d = ",n);
		for(int m=0; m<M;m++){
			printf("%d ",mass[n][m]);
		}
	}

	system("pause");
	return 0;
}
Но проблема в том, что мне нужно тоже самое решение этой задачи, но только на Си (и желательно, чтобы все работало в Borland C++ builder).

Буду очень благодарен.

Р.S. Прошу прощения, если оформил не правильно.

Добавлено через 1 час 23 минуты
Как мне подсказали, вот что нужно сделать

исключить
Код:
#include <algorithm>
using namespace std;
переписать с использованием malloc() (кстати выделения памяти есть, а освобождения нет, использовать free())
Код:
int **mass = new int*[N];
for (int i = 0; i < N; i++) mass[i] = new int[M];
реализовать rotate самостоятельно.
Код:
std::rotate(mass[n],mass[n]+(M-EditNumber),mass[n]+M);
и максимальное значение unsigned int в большинстве случаев другое.
Но я не знаю как это сделать. Прошу помочь.
Rume вне форума
 
Ответить с цитированием Вверх
 
Время генерации страницы 0.02263 секунды с 10 запросами