Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
#1

Лабораторная по массивам - C++

17.11.2011, 23:41. Просмотров 1339. Ответов 26
Метки нет (Все метки)

Здравствуйте. Нам задали лаб. работу по массивам, даже не знаю как должен выглядеть код программы.. Помогите...
Условие:
Пользователь вводит число с плавающей точкой (меньше 10 элементов)
Вывести на экран номер ошибки.
ошибка №1 - В числе не одна точка
ошибка №2 - В числе присутствуют символы, не являющиеся цифрами.
Например:
Я ввожу 6.454.543? мне должно вывести на экран "ошибка №1" и т.д.
Помогитее =(((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2011, 23:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Лабораторная по массивам (C++):

Лабораторная по массивам - C++
Дан одномерный массив А, состоящий из N элементов. Переписать в одномерный массив В все элементы, заключенные между максимальным и...

по массивам - C++
Для одномерного массива, состоящего из n вещественных чисел: а) найти минимальный по модулю элемент массива; б) вычислить сумму...

По массивам... - C++
Задан случайный массив. Нужно получить без повторений элементы, встречающиеся в массиве более одного раза. Вот что получилось: ...

По массивам.... - C++
Добрый вечер:).На носу итоговая сессия, к сожалению для допуска на нее не могу справится с заданием который дал мне преподаватель (по...

Задача по массивам - C++
Помогите пожалуйста с задачей на с++ Количество студентов N=40. Имена студентов-символьный массив Nam. Каждый элемент-буква,код...

Задачи по массивам - C++
короч котаны есть проблема плохо разбираюсь в массивах, помогите кто чем смоЖет а?)) 2 задачи 1.Определить средний рост девочек, и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
greshnikk
30 / 30 / 0
Регистрация: 05.11.2008
Сообщений: 162
17.11.2011, 23:51 #2
Цитата Сообщение от b0n4b Посмотреть сообщение
Помогитее =(((
"Спасение утопающих - дело рук самих утопающих".
Расскажите ваши мысли по поводу задачи. Абстрагируйтесь от программирования и продумайте логически, как бы вы решили эту задачу, используя элементарные действия. Лучше всего, если вы по пунктам распишите для себя логику всей задачи, дабы иметь представление о том, что Вам собственно говоря нужно будет делать.
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
18.11.2011, 00:04  [ТС] #3
Может быть моя логика покажется Вам бредом, но я бы сделал так:
Из введенного числа "выбросил" символы ".", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0".
Потом рассматривал бы символы, которые остались.
Если бы там присутствовали символы не являющимися цифрами, то вывел бы номер соответствующей ошибки.
Только я не знаю как верны ли мои рассуждения.
Так же мне не хватает навыков и умений, чтобы написать код.
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
18.11.2011, 00:08 #4
есть такой вариант, как делать через строки и проверять каждый элемент, то ли на буквы, то ли на точки
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
18.11.2011, 00:10  [ТС] #5
А как сделать, чтобы введённое число разложить на строки?
greshnikk
30 / 30 / 0
Регистрация: 05.11.2008
Сообщений: 162
18.11.2011, 00:12 #6
Цитата Сообщение от b0n4b Посмотреть сообщение
Может быть моя логика покажется Вам бредом, но я бы сделал так
Будьте смелее и не стесняйтесь в рассуждениях, мыслях и любознательности. Я нахожусь здесь отнюдь не для того, чтобы как-то вас оскорблять или что-то подобное.
Итак, давайте подумаем над Вашим вариантом. Вы выбросите из числа точки и все цифры. Как вы думаете можно ли тогда выполнить первое задание "Ошибка №1 - В числе не одна точка". Ведь у нас совсем не останется точек для проверки на данную ошибку, не так ли?
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
18.11.2011, 00:12 #7
например...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
using namespace std;
 
void main()
{
    setlocale(LC_CTYPE, "rus");
    char s[80];
    cin >> s;
    int k = 0;
    for(int i = 0; i < strlen(s); i++)
    {
        if(s[i] == '.')
            k++;
        if(k == 2)
        {
            cout << "Ошибка №1";
            break;
        }
        if(!(s[i] >= '0' && s[i] <= '9') && s[i] != '.')
            cout << "Ошибка №2";
    }
}
R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
18.11.2011, 00:33 #8
вот ещё вариант
достаточно неуклюжий
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
#include <iostream>
#include <cctype>
 
int main()
{
        const int arraySize = 10;
        char massiv[arraySize] = { 0 };
        int point = 0;
 
        bool gate = true;
 
        std::cin >> massiv;
 
        for(int i = 0; i < arraySize; i++)
        {
                if(isalpha(massiv[i]) && massiv[i] != '.')
                {
                        std::cout << "Ошибка №2 - В числе присутствуют символы, не являющиеся цифрами.";
                        gate = false;
 
                }
                if(massiv[i] == '.')
                {       point++;
                        if(point == 2)
                        {
                                std::cout << "ошибка №1 - В числе не одна точка";
                                gate = false;
                        }
                }
        }
 
        if(gate)
                for(int i = 0; i < arraySize; i++)
                        std::cout << massiv[i];
 
        std::cout << std::endl;
 
        return 0;
}
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
19.11.2011, 23:27  [ТС] #9
amor1k, R136a1, а можно ли написать более простой код? Просто многие функции и команды мне не известны, и соответственно не понятны.

greshnikk, Может быть тогда такой алгоритм?
1. Пользователь вводит якобы число с плавающей точкой.
2. Компьютер проверяет, есть ли в этом числе символы, которые не являются числами. Если присутствуют такие символы то это считается ошибкой.
3. Компьютер подсчитывает количество точек (.). Если их более 1, то это считается ошибкой.
4. Компьютер выводит на экран номер ошибки.
greshnikk
30 / 30 / 0
Регистрация: 05.11.2008
Сообщений: 162
20.11.2011, 00:17 #10
Цитата Сообщение от b0n4b Посмотреть сообщение
1. Пользователь вводит якобы число с плавающей точкой.
Возникает вопрос, как конкретно пользователь будет вводить данные ? Ведь в компиляторе не существует типа данных "якобы число с плавающей точкой".
R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
20.11.2011, 00:44 #11
b0n4b, с комментариями яснее?
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
#include <iostream>
#include <cctype>
 
int main()
{
        const int arraySize = 10; // Размер массива
        char massiv[arraySize] = { 0 }; // Заполняем массив нулями
        int point = 0;
 
        bool gate = true;
 
        std::cin >> massiv; // Вводим число
 
        for(int i = 0; i < arraySize; i++) // Проверка на ошибки
        {
                /* isalpha возвращает true если встречается символ, но не точка
                   проверка на ошибку №2
                */
                if(isalpha(massiv[i]) && massiv[i] != '.')
                {
                        std::cout << "Ошибка №2 - В числе присутствуют символы, не являющиеся цифрами.";
                        gate = false;
 
                }
                /* Проверка на ошибку №1
                   Если встречается точка, счетчик point инкрементируется
                   Если point == 2 выводится ошибка
                */  
                if(massiv[i] == '.')
                {       point++; // счетчик точек
                        if(point == 2)
                        {
                                std::cout << "ошибка №1 - В числе не одна точка";
                                gate = false;
                        }
                }
        }
        /* Если ошибок нет, gate = true, массив выводится
           Если ошибки были обнаружены gate = false, цикл пропускается, массив не выводится
        */
        if(gate)
                for(int i = 0; i < arraySize; i++)
                        std::cout << massiv[i];
 
        std::cout << std::endl;
 
        return 0;
}
А лучше напиши что тебе не понятно
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
20.11.2011, 00:52  [ТС] #12
Цитата Сообщение от greshnikk Посмотреть сообщение
Возникает вопрос, как конкретно пользователь будет вводить данные ? Ведь в компиляторе не существует типа данных "якобы число с плавающей точкой".
Через массив. В нашем случае это будет к примеру
C++
1
a[10]
Я прав?

Добавлено через 6 минут
R136a1, мне не разу не приходилось иметь дело с таким типом данных как
C++
1
bool
. А так же
C++
1
point
, и ещё некоторые моменты.
greshnikk
30 / 30 / 0
Регистрация: 05.11.2008
Сообщений: 162
20.11.2011, 00:57 #13
Цитата Сообщение от b0n4b Посмотреть сообщение
Через массив.
В языке C++, необходимо объявить тип данных, хранимых в массиве. Просто объявить a[10] нельзя, поскольку неизвестно, сколько отводить под массив памяти, ведь разные типы данных занимают разное количество места. Вопрос остается в силе, какой же тип данных нам следует использовать?
Цитата Сообщение от b0n4b Посмотреть сообщение
мне не разу не приходилось иметь дело с таким типом данных как
C++
1
bool
. А так же
C++
1
point
, и ещё некоторые моменты.
В языке C++ хоть и есть такой тип данных как булевский, но я не рекомендую им пользоваться. Вместо него используют целочисленный тип. Все что не ноль это истина. Соответственно 0 это ложь. Чтоже касается типа данных point, то такого типа данных не существует в языке C++. Но даже, если он и есть, он означает совершенно не то, что нам необходимо.
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
20.11.2011, 01:02  [ТС] #14
Ну для начала так объявлю массив.
C++
1
char a[10];
Потом введу число?
C++
1
scanf ("%d", a);
Правда не уверен что так

Долее пойдёт цикл фор
C++
1
for (int i=0; i<10; i++)
greshnikk
30 / 30 / 0
Регистрация: 05.11.2008
Сообщений: 162
20.11.2011, 01:10 #15
Цитата Сообщение от b0n4b Посмотреть сообщение
Ну для начала так объявлю массив.
C++
1
char a[10];
Итак, получается, что вначале пользователь будет вводить не "якобы число с плавающей точкой", а абсолютно любую последовательность символов. И даже не важно, есть в ней цифры или нету. Теперь можно идти дальше по предложенному Вами алгоритму. У меня есть такое предложение - почему бы не объединить пункты 2 и 3. То есть проходя по нашему массиву не по отдельности искать сначала не допустимые символы, затем подсчитывать количество точек, а одновременно смотреть и символы и точки считать. Тем самым будет сокращено время выполнения программы, не так ли ? Ну и на основе результата, уже выводить код ошибки, если необходимо. Логика программы полностью описана:
1. Ввести строку
2. Проверить наличие недопустимых символов и количество символов '.' в строке
3. На основе п. 2 вывести результат (ошибка или же нет ошибки).
Теперь можно приступать к написанию программы, опираясь на описанный алгоритм, подробно, по пунктам реализовывая задачи.

P.S.:, вот только вводить необходимо не число а строку, Вы ведь объявили символьный массив. Следующий код считывает строку и помещает ее в Ваш массив:
C++
1
scanf ("%s", a);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2011, 01:10
Привет! Вот еще темы с ответами:

задачи по массивам - C++
Доброго времени суток! Помогите с решением. Нужно использовать массивы. {a}_{1}, {a}_{2}, ... действительные числа {a}_{1}&gt;0 и...

Программа по массивам - C++
Ребя может кто помочь написать программу на экзамен. Вот задание: составить прогу для удвоения всех элементов двумерного массива А (размер...

Вопрос по Массивам. - C++
Всем Гуру и знатокам C++ Привет. Я хочу изучать язык С++, но он мне очень трудно потдаётся). Помогите пож-та: Я не могу составить...

Вопрос по массивам С++ - C++
Вот код: #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main () { int a; for(int i=0; i&lt;=10; i++) //...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.11.2011, 01:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru