• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задачи на тему "Массивы", С++

  • Автор темы Автор темы moretti
  • Дата начала Дата начала

moretti

Ученик
Регистрация
30 Окт 2012
Сообщения
4
Реакции
0
Баллы
0
Задачи на тему "Массивы", С++

Доброго времени суток, мог бы кто-нибудь помочь с заданием по проге, а именно программы:
1.Найти сумму чисел, расположенных между максимальным и минимальным элементами (включая сами числа).
2.Найти наибольшее среди чисел первой последовательности, входящих во вторую.
3.Дан массив целых чисел, содержащий n элементов. Получить массив, в котором записаны сначала все положительные числа, затем все отрицательные числа и нули, сохраняя порядок следования.
4.Найти наибольший элемент среди элементов главной и побочной диагонали и вывести на экран строку, в которой он находится. Определить, явля¬ется ли матрица ортонормированной, т. е. такой, в которой скалярное произведение каждой пары различных строк равно 0, а ска¬лярное произведение каждой стро-ки на себя равно 1.
5.Определить номер первой по порядку строки, в которой содержится наименьшее количество различных символов.
Был бы бескрайне благодарен, можно и договориться)
 
Задача 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 != 0; i++)
{
if(input >= '0' && input <= '9')
{
do_decrypt = 1;
break;
}
}

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

getch();

return 0;
}
 
Задача 1:


Задача 3:
Нет вопросов по 3-ей задаче, но если честно, я не понял первую, очень непонятным языком написано, можешь помочь разобраться или более простым языком написать, если не трудно
 
Вот тебе задача 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:=random(20);
write(a,' ');
end;
writeln;
max:=a[1];min:=a[1];imax:=1;imin:=1;
for i:=1 to n do
if a>max then
begin
max:=a;
imax:=i;
end
else if a<min then
begin
min:=a;
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;
end
else if imax>imin then
begin
sum:=0;
for i:=imin+1 to imax-1 do
sum:=sum+a;
end;
writeln('Summa=',sum);
readln
end.
 
Вот только компилятор другой (первую задачу не я писал)

#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);
}
}
 
Все решил,если будет кому интересно - напишу коды
 
Назад
Сверху