Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Rusl_v
13 / 12 / 2
Регистрация: 22.12.2010
Сообщений: 67

Проверьте решение новичка:)

05.01.2011, 20:45. Показов 1037. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите программу,которая считывает с клавиатуры символы до тех пор,пока не будет введен символ $.Организуйте в программе подсчёт количества введённых точек.Результаты подсчёта должны выводиться по окончании выполнения программы.

Доброго времени суток уважаемые!
Долго думал как подсчитать точки,не получалось,хотел уже создавать тему "помогите",но решил чуток побороться и вот результат:

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
//******Начало******
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <cmath>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{   
    char x;
    int y=0;
    do {
    cout<<"Vvedite simvol:";
    cin>>x;
    if (x=='.'){
        y++;
    }
    }
    while (x!='$');
    cout<<"Kolichestvo vvedenix tochek="<<y<<"\n";
    system("pause");
    return 0;
}
//******Конец******
Хорошим тоном написан код или слишком замудрил?.И ещё вопрос,когда я ввожу не один символ а к примеру 2 и более,выводиться 2 и более строки Vvedite simvol,как решить эту проблему,как сделать так чтобы cin считывал первый символ а остальные игнорил или как нибудь другим методом.
P.S.Пожалуйста подсказки на Си++ выкладывайте,чтоб я не запутался.Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.01.2011, 20:45
Ответы с готовыми решениями:

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

Проверьте решение на ошибки и недочеты
Сейчас просто без Студии сижу, а на завтра нужно сдать всё. Вот написал по примерам код. Суть задания: Описать структуру с именем...

Написать функцию вычисления суммы ряда для заданного аргумента с точностью 4 знака после запятой (проверьте решение)
Написать функцию вычисления суммы ряда для заданного аргумента с точностью 4 знака после запятой. Результат выдать в виде таблицы,...

11
4 / 4 / 1
Регистрация: 13.12.2009
Сообщений: 60
05.01.2011, 21:37
Как мне кажется, в коде есть лишние сточки кода, которые можно убрать.
0
54 / 54 / 9
Регистрация: 09.11.2010
Сообщений: 120
05.01.2011, 21:39
Rusl_v, это происходит из-за того, что объявленная переменная "x" не имеет размера, т.е. отсутствуют квадратные скобки после "x"
C++
1
char x[10];
И из-за этого, если с клавиатуры введено более одного знака, компилятор считает каждый знак в отдельности. Если например программу переписать вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    char x[10];
    int y = 0;
 
    do {
        cout<<"Type a num:";
        cin>>x;
        if (x == '.') y++;
    } while (x!='$');
 
    cout<<"Sign '.' was typed = "<<y<< " times." << "\n";
 
return 0;
}
то она работать вовсе не будет. А если так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
        char x[10];
        int y = 0;
 
        do {
                cout<<"Type a num:";
                cin>>x;
                if (x == ".") y++; //  заметь, что вместо одинарных ковычек(' '), 
        } while (x!="$");          // прописаны двойные(" ")
 
        cout<<"Sign '.' was typed = "<<y<< " times." << "\n";
 
return 0;
}
то она войдет в бесконечный цикл "ввода" но при этом, если вводить больше одного знака, она не будет отображать строку "Type a num: ".

Так что первый вариант, в данном случае, самый подходящий.

Мой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int main()
{
    char x[10], wrong[] = "$", right[] = ".";
    int i = 0;
    
    do {
        cout << "Type a num: ";
        cin >> x;
        if(!strcmp(right, x)) i++;
 
    } while (strcmp(wrong, x));
 
    cout << "Sign '.' was typed " << i  << " times." << endl;
    
return 0;
}
PS Сам новичек, если я где-то не прав, прошу поправить.
PSS И да, у вас подключено слишком много ненужных библиотек.
1
 Аватар для x1Mike7x
222 / 135 / 19
Регистрация: 06.11.2010
Сообщений: 234
05.01.2011, 21:51
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
        char x[]="dfr.c$f.";
        int i = 0, y = 0;
 
        do 
        {
                if (x[i++] == '.') 
                      y++;
        } while (x[i]!='$');
 
        cout<<"Sign '.' was typed = "<<y<< " times." << "\n";
 
return 0;
}
Вот-так работает.
Ошибка не в кавычках, а в том, что не был задан элемент массива, то есть по сути x!='$' - это проверка, является ли адрес строки х равен коду символа доллара.

http://codepad.org/UkokVRjF
0
 Аватар для Rusl_v
13 / 12 / 2
Регистрация: 22.12.2010
Сообщений: 67
05.01.2011, 21:56  [ТС]
Спасибо за ответ.
Да, за библиотеки я в курсе, просто это тренировочный файл,я иногда там использую функции,рандом, и т.д.
Что то понял конечно,а что то нет,я ещё до размеров не дошёл и некоторые инструкции мне непонятны.
Спасибо за ответ,по поже вернусь к нему.
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
05.01.2011, 22:09
Escapable, использовать для сравнения не отдельные символы, а строки - по меньшей мере странно.
Вот так проще (и правильней), ИМХО:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main()
{
    char c;
    size_t cnt = 0;
    std::cout << "Input characters here:" << std::endl;
    while((c = std::cin.get()) != '$')
        if(c == '.')
            ++cnt;
            
    std::cout << "The number of dots: " << cnt << std::endl;
    return 0;
}
0
54 / 54 / 9
Регистрация: 09.11.2010
Сообщений: 120
05.01.2011, 22:12
x1Mike7x, по ссылке, ответ же вроде неверный. В массиве же две точки, а в ответе одна. Попробовал применить ваш измененный код для ввода значений с клавиатуры, так вот там я встречаюсь с бесконечным циклом.


Rusl_v, ваш первый вариант верный, просто вводите не больше одного символа =)
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
05.01.2011, 22:16
Цитата Сообщение от Escapable Посмотреть сообщение
Rusl_v, ваш первый вариант верный, просто вводите не больше одного символа =)
Я привел вариант, в котором можно вводить хоть один, хоть 100 символов, и программа будет работать правильно
0
54 / 54 / 9
Регистрация: 09.11.2010
Сообщений: 120
05.01.2011, 22:21
Nameless One, ну как я говорил ранее, только учусь . Например для меня не знаком тип
C++
1
size_t
А эта строка
C++
1
std::cin.get()
эквивалента строке
C++
1
gets_s(); // using namespace std
??
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
05.01.2011, 22:29
Цитата Сообщение от Escapable Посмотреть сообщение
Nameless One, ну как я говорил ранее, только учусь . Например для меня не знаком тип
C++
1
size_t
Это беззнаковый целый тип, обычно эквивалентный unsigned int (но необязательно)
Цитата Сообщение от Escapable
А эта строка
C++
1
std::cin.get()
эквивалента строке
C++
1
gets_s(); // using namespace std
??
А вот функцию gets_s я сам впервые вижу, скорее всего это очередная "безопасная" микрософтовская версия функции gets языка C (gets действительно не рекомендуют использовать, вместо нее лучше использовать fgets, так как gets_s скорее всего не переносима)

cin.get используется для того, чтобы вытащить из потока отдельный символ. Подробнее здесь
0
 Аватар для x1Mike7x
222 / 135 / 19
Регистрация: 06.11.2010
Сообщений: 234
05.01.2011, 22:30
Цитата Сообщение от Escapable Посмотреть сообщение
x1Mike7x, по ссылке, ответ же вроде неверный. В массиве же две точки, а в ответе одна. Попробовал применить ваш измененный код для ввода значений с клавиатуры, так вот там я встречаюсь с бесконечным циклом.
Вторая точка находится за знаком доллара, то есть она уже не учитывается.
0
54 / 54 / 9
Регистрация: 09.11.2010
Сообщений: 120
05.01.2011, 22:37
Nameless One, да, вы правы, компилятор меня вежливо попросил добавить "_s" при попытке использовать "gets".


x1Mike7x, точно, не заметил. Но к сожалению это не отменяет второй проблемы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.01.2011, 22:37
Помогаю со студенческими работами здесь

C++ для новичка-не новичка
Знал с++, забросил - теперь опять. Но есть проблема что я знал с++ для дос, а мне нужен си для линукс-виндовс - то что можно продать. Я...

Найти Задачи и Их Решение для Новичка
Помагите найти Очень - очень - очень много задачи и их решение на ассемблере для Новичка. Хочу научиться детально.

Проверьте решение
Проверьте пжлст задание: Вычисление предела числовой последовательности: \lim_{x \rightarrow \infty } \frac{1+2+.....+n}{n-{n}^{2}+3}= ...

Проверьте решение - 1
Не смог решить несколько интегралов (я не скидываю Вам всё чтоб вы всё решили, лишь ту незначительную часть что не смог сам). Ввёл в онлайн...

Проверьте решение
Есть ли ошибки? Если да, то какие?


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru