• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

перевод с С++ на С

  • Автор темы Zewer
  • Дата начала
Статус
Закрыто для дальнейших ответов.
Z

Zewer

просьба перевести с С++ на С
C++:
#include <iostream>
#include <cstdlib>

int main()
{
int n, m, i, j;
std::cout << "Input row count:\n> ";
std::cin >> n;
std::cout << "Input column count:\n> ";
std::cin >> m;

int** matr = new int*[n];
for (i = 0; i < n; ++i)
matr[i] = new int[m];

for (i = 0; i < n; ++i)
for (j = 0; j < m; ++j)
matr[i][j] = rand() % 100;
for (i = 0; i < n; ++i)
for (j = m >> 1; j < m; ++j)
matr[i][m - j - 1] = matr[i][j];

std::cout << "Result matrix:"<<std::endl;
for (i = 0; i < n; ++i, std::cout << std::endl)
for (j = 0; j < m; ++j)
std::cout << matr[i][j] << " ";
return EXIT_SUCCESS;
}
и повозможности исправить ошибки, задачка по которой писалась прога:
Заполнить матрицу случайными числами. Отобразить правую половину матрицы на левую зеркально симметрично относительно вертикальной оси
наперед спасибо
 
I

ierofant

Что тут переводить-то? :rolleyes:
C++ std::cout; C printf
C++ std::cin; C scanf
C++ new; C malloc

Всего-то делов, поменять три конструкции.
 
L

lazybiz

ierofant
Ты забыл про объявление переменных вначале функции.
C++:
#include <stdio.h>
#include <stdlib.h>

int main()
{
int	**	matr;
int	n, m, i, j;

printf( "Input row count: " );
scanf( "%d", &n );
printf( "Input column count: " );
scanf( "%d", &m );

matr = (int **)malloc( n * sizeof( int * ) );
for ( i = 0; i < n; ++i ) {
matr[i] = (int *)malloc( m * sizeof( int ) );
}

for ( i = 0; i < n; ++i ) {
for ( j = 0; j < m; ++j ) {
matr[i][j] = rand() % 100;
}
}

for ( i = 0; i < n; ++i ) {
for ( j = m >> 1; j < m; ++j ) {
matr[i][m - j - 1] = matr[i][j];
}
}

printf( "Result matrix:\n" );
for ( i = 0; i < n; ++i ) {
for ( j = 0; j < m; ++j ) {
printf( " %3d", matr[i][j] );
}
printf( "\n" );
}

return 0;
}
Ошибки не исправлял.
 
L

lazybiz

Не-а...)) Это для старого кода. В C99 их можно объявлять где угодно. Даже внутри оператора for.
В этом ты прав!)) Но с другой стороны, автор не говорил о стандарте. Выходит мой вариант более универсален))
 
Z

Zewer

lazybiz
да ти прав, о стандартах не било ни слова)
перевод помог, ошибки поправил, все пашет, спасибо большое
 
I

ierofant

Эх, прискорбно всё это, скоро в мир выйдет стандарт C1x, а мы ещё с С90 на С99 не перешли. :rolleyes:
 
L

lazybiz

ierofant
Хе)) Как ты думаешь, почему, к примеру, такое современное творение как ядро Linux пишется не на С++ ? (акцент на плюсах)
Считаешь что все его разработчики устарели?))
 
I

ierofant

Это не совсем тоже самое. Я не сравнивал между собой С и С++. О С++ я вообще не говорил в этом посте. Я сравнивал лишь стандарты языка C друг с другом.
А пишут его на C они по двум причинам:
1) Историческая (переносить ядро с C на С++ было бы слишком хлопотно, да и смысла особого нет). Google Chrome OS, например, пишется на C++, так как они начали с него и им не надо переносить большое количество кода на другой язык.
2) С всё таки быстрее в большинстве случаев.
И я бы не сказал, что ядро linux современное творение у него очень давняя история, но оно не стоит на месте и постоянно развивается.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!