Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2017, 18:49   #1
Anton19901505
Пользователь
 
Регистрация: 08.01.2017
Сообщений: 26
По умолчанию [C] почему не выводит список студентов, получивших одну 4, а все остальные 5?

Код:
#include <stdio.h>
#include <locale.h>
 
struct spisok
{
    int god, month, day;
    int godp, kurs, gr;
    float oc[1000];
     int condition;
}
 
main ()
{
int i,n,j;
int ox,o4,o5;
setlocale(LC_ALL,"Russian");
printf("Введите количество студентов:");
scanf ("%d", &n);
struct spisok a[n];
    printf("Введите данные:\n");
    for (i = 0; i < n; i++)
    {
        printf("Введите дату рождения %d студента:\n",i+1);
        printf("Введите день:");
        scanf ("%d", &a[i].day);
        printf("Введите месяц:");
        scanf ("%d",&a[i].month);
        printf("Введите год:");
        scanf ("%d", &a[i].god);
        printf("Введите год поступления %d студента:",i+1);
        scanf ("%d", &a[i].godp);
        printf("Введите курс %d студента:",i+1);
        scanf ("%d", &a[i].kurs);
        printf("Введите группу %d студента:",i+1);
        scanf ("%d", &a[i].gr);
        printf("Введите средний балл %d студента:\n",i+1);
        for (j=0;j<a[i].kurs;j++)
        {printf("Введите средний балл за %d год обучения:",j+1);
        scanf ("%f", &a[i].oc[j]);}
    }
printf("Список:\n");
printf ("№  Дата рождения:  Поступил в: Курс:   № группы:   Средний балл:\n");
for (i = 0; i < n; i++)
{printf ("%d\t%d.%d.%d\t%d\t\t%d\t%d\t\t",i+1,a[i].day,a[i].month,a[i].god,a[i].godp,a[i].kurs,a[i].gr);
for (j=0;j<a[i].kurs;j++)
{printf ("%f",a[i].oc[j]);
printf ("\n\t\t\t\t\t\t\t\t");}
printf ("\n");}
 ox=o4=o5=0;
 for (i = 0; i < n; i++){
    for (j = 0; j < a[i].kurs; j++)
    {   if (a[i].oc[j]<4)
        ox=ox+1;
        if (a[i].oc[j]==4)
        o4=o4+1;
        }
 }
 if (ox==0 && o4==1) a[i].condition = 1;
 for (i = 0; i < n; i++)
{
if (a[i].condition==1)
{printf("Студенты, получившие за все время обучения одну оценку 4, а все остальные 5:\n");
printf ("№  Дата рождения:  Поступил в: Курс:   № группы:   Средний балл:\n");
for (i = 0; i < n; i++)
{printf ("%d\t%d.%d.%d\t%d\t\t%d\t%d\t\t",i+1,a[i].day,a[i].month,a[i].god,a[i].godp,a[i].kurs,a[i].gr);
for (j=0;j<a[i].kurs;j++)
{printf ("%f",a[i].oc[j]);
printf ("\n\t\t\t\t\t\t\t\t");}}}}
}
Anton19901505 вне форума Ответить с цитированием
Старый 27.05.2017, 20:33   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,316
По умолчанию

Из-за плохого форматирования кода вы не туда поставили if с установкой condition. И сбрасывать счетчики нужно перед рассмотрением оценок каждого студента. Больше, на первый взгляд, ничего не заметил.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 27.05.2017, 20:48   #3
Anton19901505
Пользователь
 
Регистрация: 08.01.2017
Сообщений: 26
По умолчанию

и как он должен выглядеть в итоге?
Anton19901505 вне форума Ответить с цитированием
Старый 27.05.2017, 21:32   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,316
По умолчанию

Ну так неинтересно
Строки "ox=o4=o5=0;" и "if (ox==0 && o4==1) a[i].condition = 1;" находятся снаружи цикла, а должны быть внутри. Подумайте и поставьте их, куда нужно.
А еще при выводе подходящих студентов там 3 вложенных цикла, а нужно 2. Внешний цикл не нужен. А вот проверку "if (a[i].condition==1)" нужно внести во 2й цикл.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 27.05.2017, 21:51   #5
Anton19901505
Пользователь
 
Регистрация: 08.01.2017
Сообщений: 26
По умолчанию

спасибо, все получилось
Anton19901505 вне форума Ответить с цитированием
Старый 27.05.2017, 22:19   #6
Anton19901505
Пользователь
 
Регистрация: 08.01.2017
Сообщений: 26
По умолчанию

еще один момент, почему при вводе фамилии на русском выводятся иероглифы?
Код:
#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <string.h>
#include <ctype.h>

 
struct spisok
{	char f[1000];
    int god, month, day;
    int godp, kurs, gr;
    float oc[1000];
     int condition;
}
 
main ()
{
int i,n,j;
int ox,o4,o5;
setlocale(LC_ALL,"Russian");
printf("Введите количество студентов:");
scanf ("%d", &n);
struct spisok a[n];
    printf("Введите данные:\n");
    for (i = 0; i < n; i++)
    {	printf("Введите фамилию %d студента:\n",i+1);
    	scanf ("%s", &a[i].f);
        printf("Введите дату рождения %d студента:\n",i+1);
        printf("Введите день:");
        scanf ("%d", &a[i].day);
        printf("Введите месяц:");
        scanf ("%d",&a[i].month);
        printf("Введите год:");
        scanf ("%d", &a[i].god);
        printf("Введите год поступления %d студента:",i+1);
        scanf ("%d", &a[i].godp);
        printf("Введите курс %d студента:",i+1);
        scanf ("%d", &a[i].kurs);
        printf("Введите группу %d студента:",i+1);
        scanf ("%d", &a[i].gr);
        printf("Введите средний балл %d студента:\n",i+1);
        for (j=0;j<a[i].kurs;j++)
        {printf("Введите средний балл за %d год обучения:",j+1);
        scanf ("%f", &a[i].oc[j]);}
    }
printf("Список:\n");
printf ("№	Фамилия	Дата рождения:	Поступил в:	Курс:	№ группы:	Средний балл:\n");
for (i = 0; i < n; i++)
{printf ("%d\t%s\t%d.%d.%d\t%d\t\t%d\t%d\t\t",i+1,a[i].f,a[i].day,a[i].month,a[i].god,a[i].godp,a[i].kurs,a[i].gr);
for (j=0;j<a[i].kurs;j++)
{printf ("%f",a[i].oc[j]);
printf ("\n\t\t\t\t\t\t\t\t\t");}
printf ("\n");}
 
 for (i = 0; i < n; i++)
{
 	ox=o4=o5=0;
 	for (j = 0; j < a[i].kurs; j++)
	{	if (a[i].oc[j]<4)
	 	ox=ox+1;
	 	if (a[i].oc[j]==4)
	 	o4=o4+1;
	}
a[i].condition = 0;
 if (ox==0 && o4==1) a[i].condition = 1;
}


for (i = 0; i < n; i++)
if (a[i].condition==1)
{printf("Студенты, получившие за все время обучения одну оценку 4, а все остальные 5:\n");
printf ("№	Фамилия	Дата рождения:	Поступил в:	Курс:	№ группы:	Средний балл:\n");
printf ("%d\t%s\t%d.%d.%d\t%d\t\t%d\t%d\t\t",i+1,a[i].f,a[i].day,a[i].month,a[i].god,a[i].godp,a[i].kurs,a[i].gr);
for (j=0;j<a[i].kurs;j++)
{printf ("%f",a[i].oc[j]);
printf ("\n\t\t\t\t\t\t\t\t\t");}
printf ("\n");}
system("pause");
}
Anton19901505 вне форума Ответить с цитированием
Старый 28.05.2017, 07:25   #7
Anton19901505
Пользователь
 
Регистрация: 08.01.2017
Сообщений: 26
По умолчанию

спасибо, уже разобрался
Anton19901505 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывести на экран анкетные данные студентов, получивших за все время одну оценку 4, а все остальные 5 - C (СИ) Anton19901505 Помощь студентам 0 24.05.2017 21:25
Преобразовать массив так,что бы с начала располагались все положительные элементы, а потом все остальные kola1010 Паскаль, Turbo Pascal, PascalABC.NET 2 29.11.2016 09:33
как определить количество студентов, получивших оценку 7 по белорусскому языку. (Написание кода на VBA в Excel) Кристина_Патачиц Microsoft Office Excel 4 15.04.2013 17:45
Вывести фамилии и даты рождения студентов, не получивших ни одной оценки 3 за все время обучения Гробовщик Общие вопросы C/C++ 1 14.01.2010 14:16
Как поменять одну из текстур объекта не меняя все остальные и без повторной загрузки объекта в GLScene DomKr@t Мультимедиа в Delphi 0 14.12.2008 01:52