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

как выполнить проверку? - C++

Восстановить пароль Регистрация
 
Kn0x
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 16
15.09.2013, 14:33     как выполнить проверку? #1
Вот задание "Ведомость абитуриентов, которые сдали вступительные экзамены в ВУЗ, содержит ФИО, адрес, оценки по трем предметам. Определить количество абитуриентов которые живут в г.Киеве, имеют средний бал по экзаменам не ниже 4,5, вывести их фамилии в алфавитном порядке"
программа компилируется, но не выдает никаких результатов, проблема в том как считается среднее значение, оно целочисленное хотя я определил его как double(увидел когда делал отладку), и не знаю как правильно задать проверку - думаю там проблема тоже но не знаю как ее решить, помогите пожалуйста.
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
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
#define N 5
 
struct ABITURIENT
{
 char NAME[50];
 char ADRESS[50];
 int EXAM1;
 int EXAM2;
 int EXAM3;
 double AVR;
 }
 ABIT[N];
 
void vvod()
{
 int i, m;
 for (i=0; i<N; i++)
  {
      cout << "Vvedite dannye " << i+1 << "-go abiturienta\n";
      cout << "Familia: ";
      cin >> ABIT[i].NAME;
      cout << "Adress: ";
      cin >> ABIT[i].ADRESS;
      cout << "Ocenka za 1-j predmet\n";
      cin >> ABIT[i].EXAM1; 
      cout << "Ocenka za 2-j predmetn\n";
      cin >> ABIT[i].EXAM2;
      cout << "Ocenka za 3-j predmet\n";
      cin >> ABIT[i].EXAM3;
      ABIT[i].AVR = (ABIT[i].EXAM1 + ABIT[i].EXAM2+ ABIT[i].EXAM3)/3;
  }
}
 
void printrezult()
{
 int z;
  for(z=0;z<N;z++)
  {
      if ((ABIT[z].AVR > 4,5) && (ABIT[z].ADRESS == "Kyiv"))
      {
          cout << ABIT[z].NAME << "\n";
      }
  }
}
 
void sort()
{
 int j,k;
 ABITURIENT p;
 for(j=0; j<N; j++)
  {
   for(k=0; k<N; k++)
    {
     if(strcmp(ABIT[j].NAME,ABIT[k].NAME)<0)
      {
       p=ABIT[j];
       ABIT[j]=ABIT[k];
       ABIT[k]=p;
      }
    }
  }
}
 
void main()
{
 vvod();
 sort();
 printrezult();
 getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2013, 14:33     как выполнить проверку?
Посмотрите здесь:

C++ как устроить проверку на дурака
C++ Составить программу, которая позволяет ввести с клавиатуры шестнадцатеричное число и записать его в переменную a, выполнить требуемую проверку.
Выполнить проверку вручную (такое задание) и составить блок схему C++
Нужно выполнить проверку!В С++ C++
Выполнить проверку за 7 дней как подробно разобрать каждый день? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 14:42     как выполнить проверку? #2
Цитата Сообщение от Kn0x Посмотреть сообщение
if ((ABIT[z].AVR > 4,5
4,5 это на самом деле 5
целая и дробная часть разделятся точкой а не запятой
C++
1
if ((ABIT[z].AVR > 4.5
Добавлено через 2 минуты
Цитата Сообщение от Kn0x Посмотреть сообщение
ABIT[z].ADRESS == "Kyiv"
а вот и вторая ошибка. строки так не сравниваются. для этого есть специальная функция strcmp(s1, s2)
она принимает две строки. если они равны то возвращается 0, а если разные то уже какое-то другое число
C++
1
if (strcmp(ABIT[z].ADRESS, "Kyiv")==0);
Kn0x
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 16
15.09.2013, 14:43  [ТС]     как выполнить проверку? #3
Цитата Сообщение от _ Посмотреть сообщение
4,5 это на самом деле 5
целая и дробная часть разделятся точкой а не запятой
C++
1
if ((ABIT[z].AVR > 4.5
исправил, не помогло(
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 14:49     как выполнить проверку? #4
Цитата Сообщение от Kn0x Посмотреть сообщение
ABIT[i].AVR = (ABIT[i].EXAM1 + ABIT[i].EXAM2+ ABIT[i].EXAM3)/3;
не знаю это ошибка или нет. но результат будет неточный. справа от = все числа целые и результат получится целым. дробная часть исчезнет
Kn0x
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 16
15.09.2013, 14:50  [ТС]     как выполнить проверку? #5
Цитата Сообщение от _ Посмотреть сообщение
а вот и вторая ошибка. строки так не сравниваются. для этого есть специальная функция strcmp(s1, s2)
она принимает две строки. если они равны то возвращается 0, а если разные то уже какое-то другое число
C++
1
if (strcmp(ABIT[z].ADRESS, "Kyiv")==0);
уже лучше, если все оценки 5 5 5, то фамилия выводится, но если 5 4 5~4,6 средний бал - то оно не выводится, то есть ошибка с средним значением осталась

Добавлено через 40 секунд
Цитата Сообщение от _ Посмотреть сообщение
не знаю это ошибка или нет. но результат будет неточный. справа от = все числа целые и результат получится целым. дробная часть исчезнет
да, ошибка где-то здесь
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 14:53     как выполнить проверку? #6
теперь в знаменателе стоит 3.0 и все должно отработать так как надо)
C++
1
ABIT[i].AVR = (ABIT[i].EXAM1 + ABIT[i].EXAM2+ ABIT[i].EXAM3)/3.0;
Kn0x
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 16
15.09.2013, 14:54  [ТС]     как выполнить проверку? #7
Цитата Сообщение от _ Посмотреть сообщение
теперь в знаменателе стоит 3.0 и все должно отработать так как надо)
C++
1
ABIT[i].AVR = (ABIT[i].EXAM1 + ABIT[i].EXAM2+ ABIT[i].EXAM3)/3.0;
спасибо большое, ипсравил проблему вот так)
C++
1
ABIT[i].AVR =(double)(ABIT[i].EXAM1 + ABIT[i].EXAM2+ ABIT[i].EXAM3)/3;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 14:56     как выполнить проверку?
Еще ссылки по теме:

Работа с файловыми потоками. Выполнить проверку в готовом коде на верхний регистр C++
Как правильно записывать условные операторы и как прервать проверку при достижении результата C++

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

Или воспользуйтесь поиском по форуму:
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
15.09.2013, 14:56     как выполнить проверку? #8
Цитата Сообщение от Kn0x Посмотреть сообщение
ипсравил проблему вот так)
ABIT[i].AVR =(double)(ABIT[i].EXAM1 + ABIT[i].EXAM2+ ABIT[i].EXAM3)/3;
все правильно. можно и так
Yandex
Объявления
15.09.2013, 14:56     как выполнить проверку?
Ответ Создать тему
Опции темы

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