0 / 0 / 0
Регистрация: 02.04.2016
Сообщений: 41
1

Даны целые числа A, B. Выбрать из отрезка [A,B] все нечетные положительные числа и составить из них массив

03.04.2019, 19:39. Показов 2179. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите разобраться, не могу понять как считать размер массива.
Даны целые числа A, B. Выбрать из отрезка [A,B] все нечетные положительные числа и составить из них массив.
для хранения массива выделять ровно столько памяти, сколько необходимо для хранения получившегося количества элементов.
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//main.cpp
#include <iostream>
#include "vect.h"
 
using namespace std;
 
int main()
{
    int a,b,n;
    cout<<"Please enter A(int):";
    cin>>a;
    cout<<"Please enter B(int):";
    cin>>b;
 
    double *v = new double[n];
    n=(b-a+1)/2;
    Sort(v,a,b);
 
    cout<<"the vector sized:"<<n<<endl;
 
 
    cout<<"Vector v:\t";
    OutputDescVect(v,n);
 
    delete []v; v=NULL;
}
//vect.cpp
#include <iostream>
#include <iomanip>
#include "vect.h"
 
using namespace std;
 
//function for input vector from screen
 
void InputDescVect(double* v,int n)
{
    int i;
    cout<<"\n Please enter the vector (double) sized "<<n<<":"<<endl;
 
    for (i=0; i<n; i++)
    {
        cout<<"< "<<i<<" > ";
        cin>>v[i];
        cout<<endl;
    }
 
}
 
//function for output vector on screen
 
void OutputDescVect(double* v,int n)
{
    int i;
    cout.precision(2);
 
    for(i=0; i<n; i++)
        cout<<setw(15)<<v[i];
    cout<<endl<<endl;
}
 
void Sort (double* v,int A, int B)
{
    int i,k=0;
    for (i=A;i<=B;i++)
    {
        if(i%2==1&&i>0)
        {
            v[k-1]=i;
            k++;
        }
    }
}
 
//vect.h
#ifndef VECT_H_INCLUDED
#define VECT_H_INCLUDED
 
void InputDescVect(double* v,int n);
void OutputDescVect(double* v,int n);
void Sort (double* v,int A, int B);
#endif // VECT_H_INCLUDED
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2019, 19:39
Ответы с готовыми решениями:

Даны целые положительные числа A и B (A < B). Вывести все целые числа от A до B включительно; при этом каждое
Даны целые положительные числа A и B (A &lt; B). Вывести все целые числа от A до B включительно; при...

Даны целые положительные числа а1, а2, ., an. Найти среди них те, которые являются квадратами некоторого числа m
Даны целые положительные числа а1, а2, ..., an. Найти среди них те, которые являются квадратами...

Даны целые положительные числа аь а2,., а„. Найти среди них те, которые являются квадратами некоторого числа т
Упорядочить по возрастанию элементы каждой строки мат рицы размером пхт. Дана строка....

Даны целые положительные числа a1, a2, ..., аn. Найти среди них те, которые являются квадратами некоторого числа m.
Даны целые положительные числа a1, a2, ..., аn. Найти среди них те, которые являются квадратами...

10
Злостный нарушитель
9509 / 5153 / 1175
Регистрация: 12.03.2015
Сообщений: 24,291
03.04.2019, 19:49 2
Зачем тип double в этой задаче? Чо за левый кусок исходника?
0
0 / 0 / 0
Регистрация: 02.04.2016
Сообщений: 41
03.04.2019, 19:57  [ТС] 3
Verevkin, double для массива используется, и что в исходнике неправильно?
0
Злостный нарушитель
9509 / 5153 / 1175
Регистрация: 12.03.2015
Сообщений: 24,291
03.04.2019, 20:00 4
Цитата Сообщение от Анна161097 Посмотреть сообщение
double для массива используется
Это противоречит условию задачи.
Цитата Сообщение от Анна161097 Посмотреть сообщение
что в исходнике неправильно?
Не знаю. Я его не читал по причине, описанной выше.
0
0 / 0 / 0
Регистрация: 02.04.2016
Сообщений: 41
03.04.2019, 20:11  [ТС] 5
Verevkin, если поменять на int, то результат все равно не верный, это не сильно влияет
0
Злостный нарушитель
9509 / 5153 / 1175
Регистрация: 12.03.2015
Сообщений: 24,291
03.04.2019, 20:15 6
Цитата Сообщение от Анна161097 Посмотреть сообщение
если поменять на int, то результат все равно не верный, это не сильно влияет
Но уже не противоречит условию задачи.
Прогресс на лицо.
0
0 / 0 / 0
Регистрация: 02.04.2016
Сообщений: 41
03.04.2019, 20:28  [ТС] 7
Verevkin, и что с размером массива сделать? находит числа по условию вроде правильно, а выводит не совсем то что нужно
0
33 / 22 / 12
Регистрация: 13.09.2017
Сообщений: 74
03.04.2019, 20:29 8
Лучший ответ Сообщение было отмечено Анна161097 как решение

Решение

Во-первых,
C++
1
v[k - 1] = i;
Это неправильная запись. Массивы в С++ индексируются всегда с нуля, а так как у вас k = 0, то у вас может выполниться запись в ячейку -1
Исправьте просто на
C++
1
v[k] = i;
Второе,
C++
1
i % 2 != 1
Это условие не проверяет нечетность. Оно фактически говорит "если остаток от деления на 2 не равен 1, то записать". Это соответствуют четным числам, не нечетным. Для нечетных это условие выглядит так:
C++
1
i % 2 != 0
И третье,
C++
1
2
double *v = new double[n];
n = (b - a + 1)/2;
Это конечно неправильно. В переменной n до инициализации хранится мусор, и вы создаете динамический массив непонятного размера. Нужно СНАЧАЛА определить переменную n, а только потом создать массив с размерностью, которая этой переменной соответствует. Поменяйте эти две строчки местами.

Больше ошибок вроде не увидел
1
Злостный нарушитель
9509 / 5153 / 1175
Регистрация: 12.03.2015
Сообщений: 24,291
03.04.2019, 20:33 9
Цитата Сообщение от Анна161097 Посмотреть сообщение
и что с размером массива сделать?
я думаю.
0
Злостный нарушитель
9509 / 5153 / 1175
Регистрация: 12.03.2015
Сообщений: 24,291
03.04.2019, 21:11 10
У меня вот так получилось:

Даны целые числа A, B. Выбрать из отрезка [A,B] все нечетные положительные числа и составить из них массив


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// код кривой, оптимизировать влом, я устал. Но работает.
int* select(int A, int B, unsigned &count)
{
  if (A < 0) A = 0;
  if (A > B) return select(B, A, count);
  
  count = 0;
  if (!A && !B) return NULL;
  
  A += !(A & 1);
  B -= !(B & 1);
  count = 1 + ((B - A) >> 1);
  
  int* result = new int[count];
  for (unsigned idx = 0; idx != count; idx++, A += 2) result[idx] = A;
  return result; // не забудь вернуть память ВЗАД.
}
1
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
03.04.2019, 21:32 11
Анна161097, считал, что A<B, B>0; если A>B внесите дополнительные строки.
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
#include <iostream> 
using namespace std;
 
int main()
{
    int A, B, n=0, m=0;
    cout << "Enter integer limits:\n";
    cout<< "A="; cin >> A;
    cout<< "B="; cin >> B;
    
    if (A<=0) A=1;
    if (A%2==0) A++;
 
    for (int i = A; i <= B; i+=2)
    n++;
    
    int*a = new int[n];
    
    for (int i = A; i <= B; i+=2)
    a[m++]=i;    
    
    for (int i = 0; i < n; i++)
      cout << a[i] << " ";
      cout << "\n";   
    
    delete[]a;
system("pause");
return 0;
}
0
03.04.2019, 21:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2019, 21:32
Помогаю со студенческими работами здесь

Даны целые положительные числа A и B (A < B). Вывести все целые числа от A до B включительно
Даны целые положительные числа A и B (A &lt; B). Вывести все целые числа от A до B включительно; при...

Даны целые числа, удалить все числа со значением максимального из них
Даны целы числа х1,...,xn . удалить все числа со значением max(х1,...,xn) Не могу найти ошибку......

Даны целые числа а1,а2,.,ан (среди них могут быть повторяющиеся). Получить все числа, взятые по одному раз из каждой группы равных членов
Даны целые числа а1,а2,...,аn Получить все числа, взятые по одному раз из каждой группы равных...

Из каждого предложения текста выбрать все числа и составить из них массив
Из каждого предложения текста выбрать все числа и составить из них массив, для каждого предложения...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru