Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Aliru777
1 / 1 / 0
Регистрация: 03.11.2011
Сообщений: 71
#1

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

03.11.2011, 08:46. Просмотров 800. Ответов 12
Метки нет (Все метки)

Доброе утро!
Я начинаю только осваивать программирование.Читаю - решаю задачи - пытаюсь разбираться в ошибках.
Написал программу с циклами - идея такая - вводят оценки от 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;
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2011, 08:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите пожалуйста какие ошибки здесь есть - или что не соблюдено. (C++):

есть ошибки в программе, может что то с компилятором у меня, подскажите пожалуйста. - C++
Программа для решения обычных уравнений методом адамса, не работает.... 3 ошибки здесь: #include &lt;math.h&gt; #include &lt;stdio.h&gt; const...

подскажите пожалуйста что я здесь делаю не правильно? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { int ivar; int dvar; ivar = 100; dvar = 100.0;...

скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? - C++
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? //анализируем все клетки доски for(int i = 0; i &lt; 8;...

Какие здесь ошибки - C++
1) int main() { Node *p1, *p2; p1 = new Node; p2 = new Node; p1-&gt;Data = 11; p2-&gt;Data = 22; p1-&gt;Next = p2; p2-&gt;Next = NULL; cout &lt;&lt;...

Какие ошибки есть в коде и что можно улучшить? - C++
Всем привет, есть вот такой код, подскажите, что у меня здесь не правильно и что можно было бы написать лучше(с точки зрения сложности...

Знаю , что подобное задание на форуме есть, но подскажите как правильно оформить мой код, пожалуйста - C++
#include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;locale.h&quot; #include &quot;math.h&quot; #include &quot;ctype.h&quot; //Не правильно считает сумму и в...

12
soon
2542 / 1307 / 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;   
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
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;
}
1
Dar101
40 / 40 / 1
Регистрация: 12.05.2011
Сообщений: 109
03.11.2011, 12:30 #4
Буквы еще можно ввести, что нехорошо для вашей программы.
0
Aliru777
1 / 1 / 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 действительно ступил - еще и делал условие,а потом убрал его.
А что лучше почитать и где задачи брать для практики?
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.11.2011, 15:04 #6
Есть прикрепленная тема в разделе c/c++, под названием литература. Почитайте.
Задания есть на форуме, для начинающего самое то, руку набьете. Также есть сайты с олимпиадными задачами, к примеру acmp.
1
Aliru777
1 / 1 / 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;
}
0
soon
2542 / 1307 / 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;
}
1
Aliru777
1 / 1 / 0
Регистрация: 03.11.2011
Сообщений: 71
04.11.2011, 10:27  [ТС] #9
Это массив,наверное - я их еще подробно не учил - запишу себе как вариант - Спасибо!
я всю ночь долбился с ней и через 20 минут после того как сюда написал решил ее,по своему правда - хотел удалить а нельзя(((.
качал пресс,играл с ребенком и читал дискретную мат-ку)))
вот где озарение приходит)))
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.11.2011, 10:42 #10
Все понятно, или может прояснить некоторые моменты в коде?
0
Aliru777
1 / 1 / 0
Регистрация: 03.11.2011
Сообщений: 71
04.11.2011, 10:55  [ТС] #11
Я их не выучил - а объяснять тому кто не знает элементарного бессмысленно.
Но из того что я знаю не пойму что такое std i endl это как "/n",а стд чтобы не задействовать юзинг найм спейс?
и не совсем понял эту сторку num += (1 << lngth - i - 1).
0
soon
2542 / 1307 / 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(). Так, на всякий случай пояснил
1
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
04.11.2011, 14:36 #13
std::endl, в отличие от '\n', кроме перевода на новую строку вызывает функцию flush, т.е. выталкивает всю накопленную в буфере информацию на выход, т.о. буфер остаётся пустым, что бывает необходимо для, например, синхронизации.
2
04.11.2011, 14:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2011, 14:36
Привет! Вот еще темы с ответами:

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

Создание простого приложения для Windows 9x/NT, решил как смог. Пожалуйста подскажите что исправить или добавить - C++
задание: окно фон зелёный размер 500х400 курсор IDT_HAND При закрытии окна вывести ФИО Мой вариант: ...

Какие есть ошибки в коде? - C++
Добрый день. Сейчас было небольшое собеседование и одна из задачек была такая /* What problems do you see in this code */ class A...

Какие есть ошибки в коде - C++
#include &lt;iostream&gt; using namespace std; class A { int num1, num2; public: A(int i) :num1(i), num2(i) { } A(int i, int j) :...


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

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

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