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

Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. - C++

Восстановить пароль Регистрация
 
Aliru777
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 71
03.11.2011, 08:46     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #1
Доброе утро!
Я начинаю только осваивать программирование.Читаю - решаю задачи - пытаюсь разбираться в ошибках.
Написал программу с циклами - идея такая - вводят оценки от 0 до 100 включительно,затем высчитывают средний балл.Если хотят закончить ввод вводят -1.
Я постарался исключить все проблемы из серии: ввели число отрицательное или больше 100,деление на 0...
Знаю что не соблюдены "правила хорошего програмирования" - буду стараться когда сильнее освою базу.
Что кроме этого сделано в программе неправильно или так что можно было бы сделать легче или быстрее?
Очень буду рад всем советам.


Код.


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
#include "stdafx.h"
#include <conio.h>
#include <math.h>
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    float total=0, mean;
    int grade,count=0;
    cout<<"Enter grade\n";
    cin>>grade;
    if (grade == -1)
    {
    cout<<"there are no grades!\n";
    }
    else 
    {
    if (grade <= 100 && grade>=0)
    {
    for ( ; grade != -1; )
    {
    total+=grade;
    count++;
    {
    do
    {
    cout<<"ENTER grade from 0 to 100 or -1 to END\n";
    cin>>grade;
    }
    while ((grade > 100 || grade < 0) && grade != -1 );
    }
    }
    }
    else
    {
    for ( ; ; )
    {
    do
    {
    cout<<"enter grade from 0 to 100 or -1 to END\n";
    cin>>grade;
    }
    while ((grade > 100 || grade < 0) && grade != -1 );
    if (grade == -1)
    break;
    total+=grade;
    count++;
    }
    }
    mean=total/count;
    cout<<total<<"\n";
    cout<<count<<"\n";
    cout<<mean<<"\n";
    }
    getch();
    return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2011, 08:46     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено.
Посмотрите здесь:

C++ скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что?
есть ошибки в программе, может что то с компилятором у меня, подскажите пожалуйста. C++
подскажите пожалуйста что я здесь делаю не правильно? C++
подскажите, пожалуйста, ошибки програм C++
C++ Подскажите, пожалуйста, учебник/статью (или что-то в этом роде) про классы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.11.2011, 09:04     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #2
Цитата Сообщение от Aliru777 Посмотреть сообщение
while ((grade > 100 || grade < 0) && grade != -1 );
Введите -2.
Может есть еще, я не вчитывался.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Принимает оценку, для выхода необходимо ввести оценку вне диапазона [0;100], либо символ.
//После окончания ввода выводит средний балл.
#include <iostream>
 
int main()
{
    int mark, count = 0;
    float sum = 0;
    std::cout << "enter mark(0 <= mark <= 100), incorrect mark to exit" << std::endl;
    while((std::cin >> mark) && (mark >= 0) && (mark <= 100))
    {
        sum += mark;
        ++count;
    }
    if(count)
        std::cout << sum / count << std::endl;
    return 0;   
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
03.11.2011, 09:50     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #3
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>
#include <conio.h>
#include <clocale>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int sum = 0, count = 0, el;
    while(cin>> el)
    {
        if (el == -1) break;
        else
        if (el > 100 || el < -1)
            cout<< "Вы ввели неверное значение\n";
        else
        {
            sum += el;
            count++;
        }
    }
    if (count != 0) // дабы не делить на 0
    {
        float ave = sum/count;
        cout<< "Среднее значение равно "<< ave;
    }
    getch();
    return 0;
}
Dar101
 Аватар для Dar101
40 / 40 / 1
Регистрация: 12.05.2011
Сообщений: 109
03.11.2011, 12:30     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #4
Буквы еще можно ввести, что нехорошо для вашей программы.
Aliru777
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 71
03.11.2011, 15:01  [ТС]     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #5
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>
#include <conio.h>
#include <clocale>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    int sum = 0, count = 0, el;
    while(cin>> el)
    {
        if (el == -1) break;
        else
        if (el > 100 || el < -1)
            cout<< "Вы ввели неверное значение\n";
        else
        {
            sum += el;
            count++;
        }
    }
    if (count != 0) // дабы не делить на 0
    {
        float ave = sum/count;
        cout<< "Среднее значение равно "<< ave;
    }
    getch();
    return 0;
}
Это проще чем у меня и , наверное, быстрее.
Спасибо!
Про буквы - я еще так далеко не читал книг - я просто не знаю как это делать вообще - но это мне на будущее - так что Спасибо!
Про -2 действительно ступил - еще и делал условие,а потом убрал его.
А что лучше почитать и где задачи брать для практики?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.11.2011, 15:04     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #6
Есть прикрепленная тема в разделе c/c++, под названием литература. Почитайте.
Задания есть на форуме, для начинающего самое то, руку набьете. Также есть сайты с олимпиадными задачами, к примеру acmp.
Aliru777
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 71
04.11.2011, 10:02  [ТС]     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #7
Программа которая пересчитывает из 2ой системы в 10чную.
Не могу понять почему в цикле ФОР не считает переменную 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
#include "stdafx.h"
#include <conio.h>
#include <math.h>
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
 
{
    int b,x,c=0,d=0;
    double w=2;
    cout<<"Enter the number\n";
    cin>>x;
    while (x > 0)  //нахождение кол-ва знаков во введенном числе
    {
        x/=10;
        c++;
    }
    cout<<c<<"\n";
    for (int a=1;a<=c;a++)
    {
        b=x%10;
        cout<<b<<"\n"; // вывод значения 1 или 0
        x=(x-b)/10;
            if (b == 1)
            {
                d=d+pow(w,a);
            }
            else 
            {
                d+=0;
            }
    }
    cout<<d<<"\n";
    getch();
    return 0;
}
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.11.2011, 10:22     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstring>
 
int main()
{
    std::string str;
    std::cin >> str;
    int lngth = str.length();
    int num = 0;
    for(int i = lngth; i >= 0; --i)
    {
        if(str[i] == '1')
            num += (1 << lngth - i - 1);
    }
    std::cout << num << std::endl;
    return 0;
}
Aliru777
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 71
04.11.2011, 10:27  [ТС]     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #9
Это массив,наверное - я их еще подробно не учил - запишу себе как вариант - Спасибо!
я всю ночь долбился с ней и через 20 минут после того как сюда написал решил ее,по своему правда - хотел удалить а нельзя(((.
качал пресс,играл с ребенком и читал дискретную мат-ку)))
вот где озарение приходит)))
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.11.2011, 10:42     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #10
Все понятно, или может прояснить некоторые моменты в коде?
Aliru777
0 / 0 / 0
Регистрация: 03.11.2011
Сообщений: 71
04.11.2011, 10:55  [ТС]     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #11
Я их не выучил - а объяснять тому кто не знает элементарного бессмысленно.
Но из того что я знаю не пойму что такое std i endl это как "/n",а стд чтобы не задействовать юзинг найм спейс?
и не совсем понял эту сторку num += (1 << lngth - i - 1).
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.11.2011, 11:16     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #12
Про std::endl все верно, это перевод на следующую строку.
Касательно
C++
1
num += (1 << lngth - i - 1)
<< это битовый сдвиг. Т.е. единицу можно представить в виде 00000001. Соответственно про сдвиге влево мы получим вот это 00000010. В десятеричной системе это двойка. будем сдвигать и дальше, будем получать num * 2^i, где i - показатель степени. В данном примере lngth - i - 1 определит номер символа с конца.
Ps/ lngth вводится для того, чтобы не вычислять постоянно str.length(). Так, на всякий случай пояснил
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2011, 14:36     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено.
Еще ссылки по теме:

C++ Десять сортировок. Четыре реализовал, подскажите, какие еще есть?
C++ Подскажите, пожалуйста, мои ошибки
Подскажите мои ошибки, пожалуйста C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.11.2011, 14:36     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. #13
std::endl, в отличие от '\n', кроме перевода на новую строку вызывает функцию flush, т.е. выталкивает всю накопленную в буфере информацию на выход, т.о. буфер остаётся пустым, что бывает необходимо для, например, синхронизации.
Yandex
Объявления
04.11.2011, 14:36     Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено.
Ответ Создать тему
Опции темы

Текущее время: 06:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru