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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2018, 21:16   #1
BundesGott
 
Регистрация: 20.12.2018
Сообщений: 7
По умолчанию [C]Структура Студентов

Доброго времени суток! Есть структура студентов,вмещающая:
фамилию,имя,дату рождения(день,месяц,год), оценки за сессию(3-5 экзаменов). Структуру нужно объединить в массив структур.
Необходимо вывести структуру в виде таблицы,а также:
1)вывести оценки тех студентов,чьи фамилии начинаются с буквы B или D
Если студентов, которые удовлетворяют условию нет - вывести сообщение на экран.
2)вывести всю информацию о студентах,имеющих по предмету "Информатика" оценку "5"
Если студентов, которые удовлетворяют условию нет - вывести сообщение на экран.
Свой код прилагаю
Код:
// ConsoleApplication13.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <stdio.h> 

struct student
{
	char surname[20];
	char name[10];
	//char examis[5][20] = { "Informatika", "Math", "Physik", "Program" };
	int Date[3];
	int exs;
	int ball[5];
};


int main()
{
	const int N = 2;
	student count[N];
	for (int i = 0; i < N; i++)
	{
		printf("Input information about %i student\n", i + 1);
		printf("Surname = ");
		scanf("%s", count[i].surname);
		printf("Name = ");
		scanf("%s", count[i].name);
		printf("Data birthday = ");
		scanf("%02d%02d%5d", &count[i].Date[0], &count[i].Date[1], &count[i].Date[2]);
		do
		{
			printf("Amount exams(3 - 5)");
			scanf("%i", &count[i].exs);
		} while (count[i].exs < 3 || count[i].exs > 5);
		for (int j = 0; j < count[i].exs; j++)
		{
			do
			{
				printf("Input his %d ball\n", j + 1);
				scanf("%d", &count[i].ball[j]);
			} while (count[i].ball[j] < 2 || count[i].ball[j] > 5);
		}
	}
	printf("\n------------------------------------------------------------------------------\n");
	printf("Surname             Name\tBirthday\tBall\n");
	printf("------------------------------------------------------------------------------\n");
	for (int i = 0; i < N; i++)
	{
		printf("%-20s%-10s\t%02d.%02d.%4d\t", count[i].surname, count[i].name, count[i].Date[0], count[i].Date[1], count[i].Date[2]);
		for (int j = 0; j < count[i].exs; j++)
		{
			printf("%3d", count[i].ball[j]);
		}
		printf("\n");
	}
	int t = 0;
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < count[i].exs; j++)
		{
			if (count[i].surname[0] == 'B' || count[i].surname[0] == 'D')
			{
				printf("%3d", count[i].ball[j]);
				t = 0;
			}
			else t++;
		}
		printf("\n");
	}
	if (t > 0 && t < N) printf("No match found");
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < count[i].exs; j++)
		{
			if (count[i].ball[1] == 5)
			{
				printf("%-20s%-10s\t%02d%02d%4d", count[i].surname, count[i].name, count[i].Date[0], count[i].Date[1], count[i].Date[2]);
			}
		}
		printf("\n");
	}
	getchar(), getchar();
	return 0;
}
С первым условием более менее справился,а вот со вторым загвоздка. Как необходимо организовать проверку на соответствие балла и желаемого предмета,чтобы вся информация о нужном студенте вывелась единожды?
BundesGott вне форума Ответить с цитированием
Старый 22.12.2018, 22:43   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Во-первых, по первому условию:
Код:
int found = 0;
for (int i = 0; i < N; i++)
    if (count[i].surname[0] == 'B' || count[i].surname[0] == 'D') {
        found = 1;
        for (int j = 0; j < count[i].exs; j++)
            printf("%3d ", count[i].ball[j]);
        printf("\n");
    }
if (!found) printf("No match found");
По второму:
Код:
int informatics_number;
printf("Input informatics index\n");
scanf("%d", &informatics_number);
found = 0;
for (int i = 0; i < N; i++)
    if (count[i].ball[informatics_number] == 5) {
        found = 1;
        printf("%-20s%-10s\t%02d%02d%4d", count[i].surname, count[i].name, count[i].Date[0], count[i].Date[1], count[i].Date[2]);
        for (int j = 0; j < count[i].exs; j++)
            // напечатать оценки
        printf("\n");
    }
if (!found) printf("No match found");
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 22.12.2018 в 22:49.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Сформировать список студентов по группам факультета ИВТ. Список по группам формировать по возрастанию количества неуспевающих студентов. Список выдать UserNopro Помощь студентам 0 08.11.2017 14:31
Список студентов Екатерина57 Помощь студентам 3 17.06.2016 18:20
Структура DateTime, битовая структура prepare2die Помощь студентам 1 10.03.2015 13:32
Фильтрация студентов nikosss Microsoft Office Excel 2 20.05.2014 22:31