Технический форум

Технический форум (http://www.tehnari.ru/)
-   C/C++/С# (http://www.tehnari.ru/f42/)
-   -   Задачи на тему "Массивы", С++ (http://www.tehnari.ru/f42/t79886/)

moretti 30.10.2012 22:49

Задачи на тему "Массивы", С++
 
Доброго времени суток, мог бы кто-нибудь помочь с заданием по проге, а именно программы:
1.Найти сумму чисел, расположенных между максимальным и минимальным элементами (включая сами числа).
2.Найти наибольшее среди чисел первой последовательности, входящих во вторую.
3.Дан массив целых чисел, содержащий n элементов. Получить массив, в котором записаны сначала все положительные числа, затем все отрицательные числа и нули, сохраняя порядок следования.
4.Найти наибольший элемент среди элементов главной и побочной диагонали и вывести на экран строку, в которой он находится. Определить, явля¬ется ли матрица ортонормированной, т. е. такой, в которой скалярное произведение каждой пары различных строк равно 0, а ска¬лярное произведение каждой стро-ки на себя равно 1.
5.Определить номер первой по порядку строки, в которой содержится наименьшее количество различных символов.
Был бы бескрайне благодарен, можно и договориться)

Gruvi 30.10.2012 23:25

Задача 1:
Цитата:

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <numeric>

int main()
{
std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
if (vec.size() <= 2)
{
std::cerr << "Too few elements in array" << std::endl;
return 1;
}
std::vector<int>::iterator min = std::min_element(vec.begin(), vec.end());
std::vector<int>::iterator max = std::max_element(vec.begin(), vec.end());
if (*min == *max)
{
std::cerr << "Min and max are equal" << std::endl;
return 1;
}
bool flg = min < max;
int sum = std::accumulate(flg ? min + 1 : max + 1, flg ? max : min, 0);
std::cout << "Sum is: " << sum << std::endl;
}
Задача 3:
Цитата:

#include <stdio.h>
#include <conio.h>

#define STR_SIZE 80
#define STR_SIZE_S "80"

int main()
{
char input[STR_SIZE + 1];
int i, j, do_decrypt = 0;

printf("Your string: ");

if(scanf("%" STR_SIZE_S "[^\n]", input) != 1)
{
printf("Empty string\n");
return 1;
}

for(i = 0; i < STR_SIZE && input[i] != 0; i++)
{
if(input[i] >= '0' && input[i] <= '9')
{
do_decrypt = 1;
break;
}
}

for(i = 0; i < STR_SIZE && input[i] != 0; i++)
{
if(input[i] >= 33 && input[i] <= 99 && do_decrypt)
{
for(j = 128; j > 0; j /= 2)
printf("%c", input[i] & j ? '1' : '0');
}
else
{
printf("%c", input[i]);
}
}

getch();

return 0;
}

moretti 30.10.2012 23:34

Цитата:

Сообщение от Gruvi (Сообщение 812729)
Задача 1:


Задача 3:

Нет вопросов по 3-ей задаче, но если честно, я не понял первую, очень непонятным языком написано, можешь помочь разобраться или более простым языком написать, если не трудно

Gruvi 30.10.2012 23:44

Вот тебе задача 1 на паскале, разбирайся:
Цитата:

uses crt;
const n=20;
var a:array[1..n] of integer;
i,imax,imin:byte;
max,min,sum:integer;
begin
clrscr;
randomize;
writeln('Massiv:');
for i:=1 to n do
begin
a[i]:=random(20);
write(a[i],' ');
end;
writeln;
max:=a[1];min:=a[1];imax:=1;imin:=1;
for i:=1 to n do
if a[i]>max then
begin
max:=a[i];
imax:=i;
end
else if a[i]<min then
begin
min:=a[i];
imin:=i;
end;
writeln('Imax=',imax,' Imin=',imin);
if imax<imin then
begin
sum:=0;
for i:=imax+1 to imin-1 do
sum:=sum+a[i];
end
else if imax>imin then
begin
sum:=0;
for i:=imin+1 to imax-1 do
sum:=sum+a[i];
end;
writeln('Summa=',sum);
readln
end.

Gruvi 30.10.2012 23:45

Вот только компилятор другой (первую задачу не я писал)

Цитата:

#include <algorithm>
#include <boost/algorithm/minmax_element.hpp>

typedef std::pair<const int*, const int*> minmax_result;

const int N = 10;

// для примера последовательность содержит случайные числа
static void fill_array(int* parray, size_t dimension)
{
std::generate_n(parray, dimension, std::rand);
}

void test1()
{

/*
1. Дана последовательность из 10 целых чисел. Найти сумму чисел
этой последовательности, расположенных между максимальным и
минимальными числами (в сумму включить и оба этих числа).
*/

int arr[N];
fill_array(arr, N);

// ищем индексы минимального и максимального элементов
minmax_result minmax = boost::minmax_element(arr, arr+N);
ptrdiff_t diff = minmax.first - minmax.second;

// суммирование
int sum;

// учтём, что индексы миниального и максимального элемента могут располагаться в массиве как угодно
// друг относительно друга.
if (diff > 0)
{
sum = std::accumulate(minmax.second, minmax.first, *minmax.first);
}
else
{
sum = std::accumulate(minmax.first, minmax.second, *minmax.second);
}
}

moretti 13.11.2012 10:55

Все решил,если будет кому интересно - напишу коды


Часовой пояс GMT +4, время: 00:42.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.