Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 29.06.2018
Сообщений: 15

Написать функцию для ввода текущего размера массива с проверкой корректности вводимых данных

29.06.2018, 12:51. Показов 3946. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать функцию для ввода текущего размера массива с проверкой корректности вводимых данных.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.06.2018, 12:51
Ответы с готовыми решениями:

Ввод дня, месяца и года с проверкой корректности ввода
Нужно ввести день, месяц, год ввод поэлементно. С проверкой на коректность ввода(при вводе цифр при нажатии, все кроме цифр, символы не...

Перевод из римских чисел в арабские с проверкой корректности ввода
Надо прогу которая переводит римские цифры в арабские и проводит корректность ввода, например iiii это не правильно. Перелопатил все проги...

Формат времени с проверкой корректности введенных данных
в проге требуется ввод времени с проверкой и дальнейшем использовать условие if else сначало сделал так: запрашиваем время: ...

9
29.06.2018, 13:46
 Комментарий модератора 
Konstantin79, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.3 (порядок именования тем).
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
01.07.2018, 21:15
Konstantin79, здравствуйте! Решил помочь вам следующим образом, но, так как никогда это раньше не делал, столкнулся с проблемой: программа вылетает после ввода первого элемента массива. Не до конца понимаю указатели. Очень прошу более знающих программистов продолжить данную тему и помочь исправить ошибку или предложить иной работающий вариант.

Мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h>
 
    using namespace std;
 
void inputArraySize(int* arr, int n) {
    if (n >= 0 && n <= INT_MAX) {
        int* arr = new int[n];
    } else {
        cout << "Array size out of bounds!\n";
        return;
    }
}
 
int main() {
    int n;
    int* arr;
    cout << "Enter an array size:\n";
    cout << "n = ";
    cin >> n;
    inputArraySize(arr, n);
    cout << "Enter an array:\n";
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    cout << "Target info:\n";
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    delete [] arr;
    system("pause");
    return 0;
}
1
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
01.07.2018, 21:21
Fixer_84, возможно это решения:
C++
1
2
3
4
int n;
    cout << "Enter an array size:\n";
    cout << "n = ";
    int* arr = new int[n];
проверить не могу

Добавлено через 3 минуты
Цитата Сообщение от Fixer_84 Посмотреть сообщение
n <= INT_MAX
такая проверка работать не будет, т.к. если число будет итак больше своего предела то оно получит мусор и не будет считаться компилятором как выше предела
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
01.07.2018, 21:39
k0vpack, здравствуйте! Спасибо за ваш ответ. То, что массив объявляется так я знаю, но, если я все правильно понял, это нужно сделать через функцию для массива, объявленного заранее, что задать его размер. Получается нужно как-то выделить память через функцию...

В итоге получилось так (через ссылку):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h>
 
    using namespace std;
 
void inputArraySize(int*& arr, int n) {
    if (n >= 0 && n <= INT_MAX) {
        arr = new int[n];
    } else {
        cout << "Array size out of bounds!\n";
        exit(0);
    }
}
 
int main() {
    int n;
    int* arr;
    cout << "Enter an array size:\n";
    cout << "n = ";
    cin >> n;
    inputArraySize(arr, n);
    cout << "Enter an array:\n";
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    cout << "Target info:\n";
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    delete [] arr;
    system("pause");
    return 0;
}
Но если значение больше INT_MAX - программа вылетает. Не знаю, что делать
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
01.07.2018, 21:40
Fixer_84, а почему нельзя выделить память в main?
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
01.07.2018, 21:45
Цитата Сообщение от k0vpack Посмотреть сообщение
Fixer_84, а почему нельзя выделить память в main?
Потому что в задании сказано задать размер через функцию Впрочем, у меня это получилось, но верхняя проверка границ барахлит.
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
01.07.2018, 21:48
Fixer_84, я плохо прочитал, но не всё же выполнено
Цитата Сообщение от Konstantin79 Посмотреть сообщение
с проверкой корректности вводимых данных
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
01.07.2018, 23:34
Лучший ответ Сообщение было отмечено Konstantin79 как решение

Решение

k0vpack, я пока не знаю, что делать. Буду думать или, надеюсь, кто-то поможет. В любом случае этот вопрос остается открытым. Буду искать, спрашивать. Знаю, что new int сама по себе является функцией, но в задании сказано ее написать, что я и сделал, но верхняя граница все еще остается проблемой. Наверное, все это вообще делается по-другому. Можно, например, использовать списки (не STL).

Добавлено через 49 минут
Пробовал проверять так, но верхняя граница все равно вылетает...Вот текущий код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <bits/stdc++.h>
 
    using namespace std;
 
void inputArraySize(int*& arr, int n) {
    try {
        arr = new int[n];
    } catch (const exception& e) {
        cout << "Array size is out of range!\n";
        exit(0);
    }
}
 
int main() {
    int n;
    int * arr;
    cout << "Enter an array size:\n";
    cout << "n = ";
    cin >> n;
    inputArraySize(arr, n);
    cout << "Enter an array:\n";
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    cout << "Target info:\n";
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    delete [] arr;
    system("pause");
    return 0;
}
Добавлено через 49 минут
k0vpack, самое смешное, что когда размер массива - константа, исключение отлавливается и все обходится предупреждением:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
#include <new>
 
    using namespace std;
 
int main() {
    try {
        int* arr = new int[INT_MAX + 1];
    } catch (bad_alloc& e) {
        cerr << "Array size out of range! Error => " << e.what() << "\n"; //Если исключение поймано
        return 0;
    }
    cout << "OK!\n"; //Если исключение не поймано
    system("pause");
    return 0;
}
Я и int в const конвертировать пробовал, ничего не помогает...Что делать?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
02.07.2018, 00:39
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Что делать?
Fixer_84, мне например непонятно что Вы реализуете. По условию:
Цитата Сообщение от Konstantin79 Посмотреть сообщение
Написать функцию для ввода
а ввод у Вас происходит в main

пусть задаётся массив например до 10000 элементов. как-то так будет выглядеть как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <ctime>
using namespace std;
 
void Size(int&n)
{    
    do
    {
    cout <<"n="; cin >> n;
    if (n<1 || n>10000) cout <<"1<=x<=10000, Repeat please...\n";
    }
    while (n<1 || n>10000);     
}
 
int main() 
{    
    int n=0;
    srand((int)time(0));
    Size(n);
    int*a = new int[n];    
    
    for (int i = 0; i < n; i++) 
    {
    a[i]=rand()%9 + 1;
    cout <<a[i]<<" ";
    }
    cout <<"\n";
    delete [] a;
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.07.2018, 00:39
Помогаю со студенческими работами здесь

Добавление записи в файл с проверкой корректности данных
В текстовом файле находятся записи о книгах в библиотеке. В каждой строке записана информация об одной книге: ФИО автора, название, год...

Проверка корректности ввода для численных типов данных
Всем добрый вечер. Столкнулся с проблемой, когда ввожу число, его нужно проверить на корректность. Делаю это следующим образом. void...

Проверка корректности вводимых данных
Есть программа на проверку високосного года. Преподаватель при проверке вводит &quot;5 Аотао&quot; к примеру и программа читает первое...

Проверка корректности вводимых данных
Здравствуйте, подскажите,пожалуйста, как прописать условия проверки. Мне нужно: если вводится радиус e больше одной из сторон, выводилось...

проблема с проверкой вводимых данных
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; double c,f; int main() { setlocale(LC_ALL, &quot;Russian&quot;); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru