Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

Ответ
 
Опции темы
Старый 21.11.2016, 17:15   #1
Ronin94
Пользователь
 
Регистрация: 28.01.2015
Сообщений: 13
Репутация: 10
По умолчанию Одномерный массив

Люди помогите лабораторку добить
*********************************** *********
В одномерном массиве, состоящем из n вещественных элементов,
вычислить:
− номер минимального по модулю элемента массива;
− сумму модулей элементов массива, расположенных после первого
отрицательного элемента.
Сжать массив, удалив из него все элементы, величина которых находится в
интервале [a,b]. Освободившиеся в конце массива элементы заполнить нулями.
*********************************** *********
проблема заключается в следующем: когда идет поиск минимального элемента то не учитывает что ноль тоже может быть минимальным элементом, а сам элемент превращается из вещественного в целочисленный. и еще почему то в интервале не все элементы зануляются
Текст программы:

#include <iostream> // поток
#include <time.h> //случайные числа
using namespace std;



int search(float arr[], int n) // поиск минимального элемента
{
int numbermin = 0;//номер минимального по модулю элемента
int min = arr[0]; //минимальный по модулю элемент
// загоняет в большой цикл
if(arr[0]>0)
{
min = arr[0];
numbermin = 0;
}
else
{
min = -arr[0];
numbermin = 0;
}
for(int i=1;i<n;i++)
{
if(arr[i]<0&&-arr[i]<min)
{
min = -arr[i];
numbermin = i;
}
else if(arr[i]>0&&arr[i]<min)
{
min=arr[i];
numbermin = i;
}
}
return(numbermin);//возвращаем значение
}

int summod(float arr[], int n) // поиск суммы
{
int sum = 0; // тут будет храниться сумма
for (int i=0; i<n; i++)
{
if (arr[i] < 0) // если первый элемент меньше 0, то начинаем считать
{
for (int j=i+1;j<n;j++) // т.к. после то прибавляем единицу
{
sum += abs(arr[j]); // тут мы считаем суммы по модулю
}
return(sum);
}
}
return(sum);
}

void compression(float a, float b, float arr[], int n) // сжимаем массив
{
// удаляем элементы, заменой их на нули
for (int i = a-1;i <= b-1;i++)
{
arr[i] = 0;
}
// выводим полученный после замены на нули
cout<<"\nМассив после замены удаления элементов = ";
for (int i=0;i<n;i++)
{
cout<<" "<<arr[i];
}
cout<<endl;
// а теперь сдвигаем элементы влево, если слева 0 и на их место пишем 0
for (int i=0;i<n-1;i++) // большой внешний цикл
{
for (int j=0;j<n-1-i;j++) // маленький внутренний отвечающий за перестановку элементов "рядом стоящих"
{
if (arr[j] == 0) // элемент равен 0?
{
arr[j] = arr[j+1]; // Да, сдвигаем влево
arr[j+1] = 0; // обнуляем тот, что справо
}
}
}

// выводим итоговый
cout<<"\nМассив после сдвига =";
for (int i=0;i<n;i++)
{
cout<<" "<<arr[i];
}
}

// головная программа
int main(void)
{
srand(time(NULL)); // начальный rand
setlocale(LC_ALL, "rus"); // русский текст
// объявление переменных
int n; //размер массива
cout<<"Введите размер массива: ";
cin>>n;
float *arr=new float[n];
float a,b;
// выводим и заполняем массив
cout<<"Исходный массив = ";
for (int i = 0; i<n; i++)
{
arr[i]=(3-(rand()%10)*0.3);
cout<<" "<<arr[i];
}
// вывод
cout<<endl;
cout<<"\nНомер минимального элемента по модулю = "<<search(arr,n)+1<<endl;//вызываем функцию search
cout<<"\nСумма модулей элементов массива, \n"<<"расположенных после первого отрицательного элемента = "<<summod(arr,n)<<endl;
cout<<"\nВведите предел a = "; cin>>a;
cout<<"Введите предел b = "; cin>>b;
compression(a,b,arr,n);
cout<<endl;
delete [] arr;
cin.get();
cin.get();
return 0;
}
Ronin94 вне форума   Ответить с цитированием
Старый 21.11.2016, 17:24   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 8,921
Репутация: 1402

icq: 216409213
По умолчанию

Цитата:
когда идет поиск минимального элемента то не учитывает что ноль тоже может быть минимальным элементом
Либо описывайте все варианты, либо откройте для себя http://en.cppreference.com/w/cpp/numeric/math/fabs и напишите один раз простое условие.

Цитата:
сам элемент превращается из вещественного в целочисленный
так вы сами написали
Код:

int min = arr[0]; //минимальный по модулю элемент

Цитата:
и еще почему то в интервале не все элементы зануляются
Вы вообще левое делаете.
1. По условию надо проверять, что элемент массива находится в интервале
2.
Код:

int i = a-1

превращает float в int
3. вы не контролируете границы
4. ...
__________________
Запомните раз и навсегда: помочь != "решите за меня"!

Последний раз редактировалось p51x; 21.11.2016 в 17:28.
p51x на форуме   Ответить с цитированием
Старый 21.11.2016, 18:23   #3
Ronin94
Пользователь
 
Регистрация: 28.01.2015
Сообщений: 13
Репутация: 10
По умолчанию

спасибо
Ronin94 вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование в VBA: двумерный массив M на N, нужно создать новый одномерный массив TheAnnihilyator Помощь студентам 1 04.06.2014 09:16
Найти одномерный массив элементы которого равны минимальным значениям в строках исходной матрицы и одномерный массив элементы... Richik123 Microsoft Office Excel 1 16.10.2013 15:45
Двумерный массив развернуть в одномерный массив по строкам[QBASIC] TrueStyle777 Помощь студентам 3 29.05.2013 21:56
Дан одномерный массив, сформировать новый массив по заданному правилу {Delphi} Nickolai47 Помощь студентам 5 16.12.2012 14:51
Одномерный массив. Q basic - Построить новый массив из элементов исходного ,которые больше P. Marishkaa Помощь студентам 2 12.01.2010 17:54




21:42.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru