Тема: Дії з масивами
всім привіт. поставлено завдання: визначити максимальний елемент в масиві, який закінчується введенням нуля. Я написав код, але мені замість максимального елементу виводить набір цифр(як я зрозумів це адрес елементу)
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Дії з масивами
Для відправлення відповіді ви повинні увійти або зареєструватися
всім привіт. поставлено завдання: визначити максимальний елемент в масиві, який закінчується введенням нуля. Я написав код, але мені замість максимального елементу виводить набір цифр(як я зрозумів це адрес елементу)
всім привіт. поставлено завдання: визначити максимальний елемент в масиві, який закінчується введенням нуля. Я написав код, але мені замість максимального елементу виводить набір цифр(як я зрозумів це адрес елементу)
ось код:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int n = 0;
for (int i = -1; i != 0; n++) {
cout << "[" << n << "]: ";
cin >> i;
}
int *arr = new int[n];
int MAX = arr[0];
for (int i = 0; i < n; i++) // Починаємо з 1
{
if (MAX < arr[i])
MAX = arr[i];
}
// Виведемо максимум
cout << MAX << endl;
_getch();
return 0;
}
В якому місці введені числа стають елементами масиву?
по ідеї в першому циклі
по ідеї в першому циклі
Тобто ще до того як для них виділиться пам’ять?
Тобто ще до того як для них виділиться пам’ять?
ось в цьому і моя проблема. Як вводити елементи масиву, незнаючи його розміру.
Бо мені в завданні треба ввести масив, і введення масиву закінчується коли ввести 0. тобто можнна ввести скількинебуть елементів, поки не введеш 0
quez написав:В якому місці введені числа стають елементами масиву?
по ідеї в першому циклі
Тоді ще два питання:
- в якому місці виділяється місце під масив?
- яка з цих двох подій відбуваєтсья раніше?
Використовуйте std::vector або виділіть масив певного розміру, і якщо введених елементів буде більше то робіть realloc
Динамічно виділити пам'ять можна ось так :
▼Прихований текст
можна. але в цьому випадку все рівно перед вводом елементів треба ввести скільки елементів буде. а мені потрібно, щоб ввід елементів закінчився із введенням нуля.
А якщо порада пана YurkoFlisk не актуальна, то:
- виділяєте певний обсяг і запам'ятовуєте, скільки вже виділено;
- заповнюєте масив по одному елементу і запам'ятовуєте в іншій змінній кількість елементів;
- якщо елементів треба більше, ніж виділено - виділяєте новий шмат, більший за попередній, і переносите туди масив, а старий видаляєте.
Саме так працює std::vector - спершу виділяє 16 елементів, а потім збільшує удвічі об'єм. Звісно, це можна встановлювати вручну (std::vector::capacity, std::vector::reserve і std::vector::shrink_to_fit).
всім привіт. поставлено завдання: визначити максимальний елемент в масиві, який закінчується введенням нуля. Я написав код, але мені замість максимального елементу виводить набір цифр(як я зрозумів це адрес елементу)
#include <iostream>
#include <vector>
using namespace std;
int main(){
setlocale(LC_ALL,"Ukrainian");
vector<int> arr;
int i(0);
while(cin >> i)
{
if(i == 0)
break;
arr.push_back(i);
}
int Max = arr[0];
for(size_t i = 1; i < arr.size(); i++)
if(Max < arr[i])
Max = arr[i];
cout << "Max= " << Max << endl;
system("pause>>void");
return 0;
}
якщо одразу ввести 0?
Буде бо-бо...
Я б таке вирішував якось так:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
setlocale(LC_ALL,"Ukrainian");
vector<int> arr;
int i(0);
while(cin >> i)
{
if(i == 0)
break;
arr.push_back(i);
}
cout << "Max= " << :(!arr.empty())?max_element(arr.begin(),arr.end()):" немає" << endl;
system("pause>>void");
return 0;
}
якщо одразу ввести 0?
Це було б безглуздо...
якщо одразу ввести 0?
але якщо вже так хочеться то ось - вводи скільки хочеш нулів спочатку
#include <iostream>
#include <vector>
using namespace std;
int main()
{
setlocale(LC_ALL,"Ukrainian");
vector<int> arr;
int i(0);
do
{
cin >> i;
if(i)
break;
cout << "Буль ласка не починай з нуля!!" << endl;
}while(true);
arr.push_back(i);
while(cin >> i)
{
if(i == 0)
break;
arr.push_back(i);
}
int Max = arr[0];
for(size_t i = 1; i < arr.size(); i++)
if(Max < arr[i])
Max = arr[i];
cout << "Max= " << Max << endl;
system("pause>>void");
return 0;
}
Itari, тут вже питання в тому Що робити якщо перший елемент 0: продовжити введення масиву чи завершити введення.
Та при вводі робіть обчислення максимального, стусанів треба надавати за оптимизацію!
#include <vector>
#include <iostream>
using namespace std;
int main() {
size_t imax = -1;
vector< int > vec;
int val = 0;
while( cin >> val )
{
if( val )
{
vec.push_back(val);
if( imax == -1 )
imax = 0;
else
if( val > vec[imax] )
imax= vec.size() - 1;
}
}
if( imax != -1 )
{
cout<<"MAX_INDEX: "<<imax<<endl;
cout<<"MAX VALUE: "<<vec[imax]<<endl;
}
return 0;
}
5 6 -3 7 11 2 3 0
stdout copy
MAX_INDEX: 4
MAX VALUE: 11
while( cin >> val )
{
if( val )
працює не так, як треба - поставте після 0 в кінці 12, побачите. Тоді вже
while( ( cin >> val ) && ( 0 != val ) )
Для відправлення відповіді ви повинні увійти або зареєструватися