Нужно перевести из С++ в Си - C (СИ) (153860)
Формулировка задачи:
Нужно перевести из С++ в Си
#include <iostream>
#include <time.h>
using namespace std;
int* del(int*,int&);
int main() {
srand(time(NULL));
int size=5;
int* arr=new int[size];
for (int i=0;i<size;i++)
cout<<(arr[i]=rand()%10)<<" ";
cout<<endl;
int* temp;
temp=del(arr,size);
for (int i=0;i<size;i++)
cout<<temp[i]<<" ";
cout<<endl;
system("pause");
return 0;
}
int* del(int* arr,int& size) {
int* temp;
for (int i=size-1;i>=0;i--)
if (arr[i]%2==0) {
for (int j=i;j<size-1;j++)
arr[j]=arr[j+1];
temp=new int[size-1]; size--;
for (int i=0;i<size;i++)
temp[i]=arr[i];
return temp;
}
return arr;
}Решение задачи: «Нужно перевести из С++ в Си»
textual
Листинг программы
Листинг:
//Удалить из состава массива четные элементы
#include<stdio.h>
#include<math.h>
#include<conio.h> /*Модуль функций расширения ввода-вывода(в Паскале аналогичный модуль CRT)*/
#include<windows.h>
void print_array(int *a,int n,char *msg);//Вывод строки заголовка msg и элементов массива х размером n
void wait_press_key(char *msg);//Вывод строки msg и ожидание нажатия клавиши для продолжения программы.
void Del_lasteven_array(int *a,int *n);//Удаление из массива последний четный элемент.
int main()
{
int n;
int a[]={5,4,3,-4,3,2,5,4,8, 13, -34,16,-34, 18,0,12, -56,13, 18, 34, -102,66,-38,-71,23,0,15};
//Подключение кирилицы в консольном окне
SetConsoleOutputCP(1251);//Использует для вывода кодовую таблицу 1251
SetConsoleCP(1251); //Использует для ввода кодовую таблицу 1251 бом-бом
printf("\t Введите размер массива <=20\n");
scanf("%d",&n);
print_array(a,n,"Исходный массив a");
//delete last even elements
Del_lasteven_array(a,&n);
// Answer
print_array(a,n,"Массив х после удаления even");
wait_press_key("\nДля завершения программы нажмите любую клавишу\n");
return 0;
}
void print_array(int *a,int n,char *msg)
{ int i;
printf("\n%s размером %d\n",msg,n);
for(i=0; i<n;i++)
printf("%8d",a[i]);
}
void wait_press_key(char *msg)
{
printf(msg);
getch();
}
void Del_lasteven_array(int *a,int *n)
{ int i,j;
for(i=*n-1;i>=0;i--)
if(a[i]%2==0)
{for(j=i;j<*n-1;j++)
a[j]=a[j+1];
(*n)--;
}}
Объяснение кода листинга программы
- Удаление из массива последний четный элемент.
- Ввод размера массива с клавиатуры.
- Вывод исходного массива на экран.
- Удаление последнего четного элемента из массива.
- Вывод измененного массива на экран.
- Ожидание нажатия клавиши для продолжения программы.
- Возврат значения 0 в функцию main(), что означает успешный конец работы программы.
- Подключение кирилицы в консольном окне.
- Использование кодовой таблицы 1251 для вывода и ввода.
- Ввод размера массива с клавиатуры осуществляется с помощью функции scanf().
- Вывод исходного массива на экран с помощью функции print_array().
- Удаление последнего четного элемента из массива с помощью функции Del_lasteven_array().
- Вывод измененного массива на экран с помощью функции print_array().
- Ожидание нажатия клавиши для завершения программы с помощью функции wait_press_key().
- Использование функции getch() для получения нажатой клавиши.
- В функции Del_lasteven_array() используется два вложенных цикла.
- Первый цикл перебирает элементы массива в обратном порядке.
- Второй цикл перемещает элементы массива, начиная с нечетного элемента, на следующий четный элемент.
- Перемещение элементов массива осуществляется с помощью оператора присваивания
=. - Размер массива уменьшается на единицу с помощью оператора
--.