Консультация № 158007
18.01.2009, 01:07
0.00 руб.
0 2 1
Доброго времени суток ! на языке СИ
1 Написать программу , которая с помощью функции генерации случайного числа получает четырехзначное число, все цифры которого различны.

2. написать подпрограмму , которая удаляет из заданного одномерного целочисленного массива размера N повторяющиеся элементы.Массив сжать.

3. Задан массив размера М*N, все числа которого различны. Написать функцию , которая выбирает в каждой строке матрицы минимальный элемент ,а затем среди этих чисел - максимальное .Значением функции должен стать номер строки массива,в которой расположен искомый элемент.

Спасибо!

Обсуждение

Неизвестный
18.01.2009, 03:39
общий
это ответ
Здравствуйте, Игорь Петрович!
В приложении 3 программы

Приложение:
// Условие задачи
// Написать программу , которая с помощью функции генерации случайного числа получает четырехзначное число,
// все цифры которого различны.

// Важно!!!
// Для корректного отображения русских букв в консоли
// зайдите в свойства консоли(нажав на пиктограмме консоли в левом верхнем углу окна)
// и установите шрифт Lucida Console

#include <limits>
#include <iostream>
#include <vector>
#include <algorithm>
#include <time.h>
#include <windows.h>
#ifdef max
#undef max
#endif

using namespace std;

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
// Иничиализация генератора случайных чисел
srand((unsigned)time(0));
// Здесь будут храниться уже отобранные числа
vector<int> v;
int ch;
do
{
// Число
int number=0;
// Ищем 4 цифры
while(v.size()<4)
{
int digit;
// Первая не должна быть 0
while(!(digit=(int)((double)rand()/(RAND_MAX+1)*10))&&!v.size());
// Ищем в уже отобранных
vector<int>::iterator t=find(v.begin(),v.end(),digit);
// Если не найдено
if(t==v.end())
{
// Добавляем к отобранным
v.push_back(digit);
// "Собираем" число
number=number*10+digit;
}
}
// Число готово-очистить список отобранных
v.clear();
// Печатаем результат
cout<<number<<endl;
cout<<"Продолжить(Y/N):";
ch=tolower(getchar());
cin.ignore(numeric_limits<streamsize>::max(),'\n');
}
while(ch=='y');
system("PAUSE");
return 0;
}

// Условие задачи
// Написать подпрограмму , которая удаляет из заданного одномерного целочисленного массива размера N
// повторяющиеся элементы.Массив сжать.

// Важно!!!
// Для корректного отображения русских букв в консоли
// зайдите в свойства консоли(нажав на пиктограмме консоли в левом верхнем углу окна)
// и установите шрифт Lucida Console

#include <limits>
#include <iostream>
#include <iomanip>
#include <windows.h>
#ifdef max
#undef max
#endif

using namespace std;

// Возвращает true, если value содержится в массиве arr длиной arrLen
bool inArray(const int* arr,int arrLen,int value)
{
for(int i=0;i<arrLen;i++)
if(arr[i]==value)return true;
return false;
}

// Сжимает массив arr длиной arrLen удаляя одинаковые элементы
// В arrLen возвращяется новая длина массива
void packarr(int* arr,int& arrLen)
{
if(arrLen>1)
{
int next=1,cand=1;
while(cand<arrLen)
{
if(inArray(arr,next,arr[cand]))cand++;
else arr[next++]=arr[cand++];
}
arrLen=next;
}
}

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int arrLen=-1;
// Вводим длину массива
do
{
cout<<"Введите количество элементов массива:";
cin>>arrLen;
if(cin.fail())
{
cout<<"Количество элементов должно быть целое положительное число"<<endl;
cin.clear();
}
cin.ignore(numeric_limits<streamsize>::max(),'\n');
}
while(arrLen<1);
try
{
// Выделяем память для массива
int *arr=new int[arrLen];
// Вводим массив
for(int i=0;i<arrLen;i++)
{
while(1)
{
cout<<"Введите "<<i+1<<"-й элемент массива :";
cin>>arr[i];
if(cin.fail())
{
cout<<"Ошибка при вводе. Будьте внимательней."<<endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(),'\n');
}
else break;
}
}
// Печать исходного массива
cout<<"Исходный массив:"<<endl;
for(int i=0;i<arrLen;i++)cout<<setw(7)<<arr[i]<<' ';
cout<<endl;
// Сжать массив
packarr(arr,arrLen);
// Печать готового массива
cout<<"Обработанный массив:"<<endl;
for(int i=0;i<arrLen;i++)cout<<setw(7)<<arr[i]<<' ';
cout<<endl;
// Освобождаем память
delete []arr;
}
catch(bad_alloc)
{
cout<<"Не могу выделить память для массива."<<endl;
}
system("PAUSE");
return 0;
}

// Условие задачи!
// Задан массив размера М*N, все числа которого различны. Написать функцию ,
// которая выбирает в каждой строке матрицы минимальный элемент ,а затем среди этих чисел - максимальное.
// Значением функции должен стать номер строки массива,в которой расположен искомый элемент.

// Важно!!!
// Для корректного отображения русских букв в консоли
// зайдите в свойства консоли(нажав на пиктограмме консоли в левом верхнем углу окна)
// и установите шрифт Lucida Console

#include <iostream>
#include <iomanip>
#include <time.h>
#include <windows.h>
#ifdef max
#undef max
#endif

using namespace std;

// Размерность массива
const int M=5;
const int N=4;

// Функция ищет максимальное значение среди минимальных для каждой строки
int maxinmin(const int arr[M][N])
{
int max,row;
for(int i=0;i<M;i++)
{
// Ищем минимальный в строке
int mininrow=arr[i][0];
for(int j=1;j<N;j++)
if(arr[i][j]<mininrow)mininrow=arr[i][j];
// Если не первая строка
if(i)
{
// Если новый максимум то сохраняем
if(max<mininrow)
{
max=mininrow;
row=i;
}
}
else
{
// Сохраняем
max=mininrow;
row=i;
}
}
return row;
}

int main()
{
srand((unsigned)time(0));
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int arr[M][N];
cout<<"Исходная матрица:"<<endl;
// Создаем и печатаем матрицу
for(int i=0;i<M;i++)
{
for(int j=0;j<N;j++)
cout<<setw(3)<<(arr[i][j]=(int)((double)rand()/(RAND_MAX+1)*51)-25)<<' ';
cout<<endl;
}
cout<<"Результат функции:"<<maxinmin(arr)<<endl;
system("PAUSE");
return 0;
}
Неизвестный
20.01.2009, 21:21
общий
to Micren:
что-то Ваш код больше похож на С++, чем на Си....
Форма ответа