• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Поименованый тип данных в С и работа с ним!

  • Автор темы Nadin85
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

Nadin85

Цель программы обработка массива таким образом, что вычислить процент иностранных студентов отличников.
У меня есть решение, но этот код работает не коректно, тоесть когда я меняю оценки, результат программы не меняеться, а ведь должен то процент меняться. Вот привожу пример этого кода:

[codebox]#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

void main ()
{
enum citizenship {ukr, rus, eng}; // это национальности студентов, иностранных я обозначила eng

struct t
{ citizenship c; //гражданство
char rate; //курс
int ball; //бал
};

t stud [7];
char rate [] = { '1', '2', '3', '4', '5', '2', '1' }; //массив курсов
int ball [] = {1, 4, 5, 4, 5, 3, 5}; // массив оценок
for (int i = 0, k = 0; i < 7; i++, k++)

{
if(k==2)k=0;
stud .c = citizenship (i);
stud .rate = rate ;
stud .ball = ball ;
}

int cnt = 0;
for(i = 0; i < 7; i++)

{ if(2 == stud.c && stud.ball == 5)cnt++;

}
float pr = ((7.0/100.0)*cnt)*100;
printf("Cnt = %d Pr = % f\n", cnt,pr);

getch ();

}
[/codebox]
Мой вопрос заключаеться в следующем, какие ошибки я допустила в листинге, что не получаю результата?
 
E

European

Вероятно, при заполнении массива структур студентов, для гражданства Вы хотели использовать индекс "k", а используете "i"
 
N

Nadin85

Если поставить вместо индекса "к" индекс "i", то цикл будет проходить безконечно и программа не будет работать :(
 
E

European

Вы не так меня поняли. Я имел в виду:
Код:
stud [i].rate = rate[k];
 
B

biz

Вы не так меня поняли. Я имел в виду:
Код:
stud [i].rate = rate[k];

ну во-первых скорее всего не
Код:
stud [i].rate = rate[k];
, а
Код:
stud[i].c = citizenship( k );
а во-вторых зачем там вообще массив курсов!??

и раз уж на то пошло, то должно быть немного не так, а вот как:
Код:
for ( i = 0, k = 0; i < 7; i++, k++ ) {
stud[i].c = citizenship( k );
if ( k == 2 ) k = 0;
stud[i].rate = rate[i];
stud[i].ball = ball[i];
}
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!