1

(37 відповідей, залишених у C++)

Хм, все що я можу обгорнути в функцію це вивід даних ( таблицю ).

2

(37 відповідей, залишених у C++)

Ні, в нас теми просто розподілені на: Ввід та вивід С, Масиви, Розгалуження, Функції і тд
Так, щоб тема була посвячена якомусь методу, стилю немає

3

(37 відповідей, залишених у C++)

Переробив програму, тепер якщо потрібно  буде переробити програму на більшу кількість предметі, потрібно тільки змінити значення NUMB_SUBJECT. Назви змінних стали зрозумілішими, невдалось замінити scanf на fgets, бо після виведення рядка який було введено через fgets наступний рядок автоматично переводить на новий рядок.
Наприклад має бути: Name Surname Group  і тд, то виводить
Name
Surname
Group

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#define STR_LEN 40
#define NUMB_SUBJECT 5
#define NAME_STRING "Name"
#define SURNAME_STRING "Surname"
#define GROUP_STRING "Group"
#define SCORE_STRING "Score"
typedef struct
{
    char name[STR_LEN];
    char surname[STR_LEN];
    char group[STR_LEN];
    float score[NUMB_SUBJECT];
    float average;
} student;
typedef struct
{

    char name[STR_LEN];

} subject;

int main()
{
    unsigned int NUMB_STUDENTS, i, j;
    printf("Enter the number of students: ");
    scanf("%i", &NUMB_STUDENTS);
    getchar();
    if (NUMB_STUDENTS < 4)
    {
        printf("Minimum number of students is 4!");
        return 1;
    }
    student students[NUMB_STUDENTS], tmp;
    printf("Enter Subjects:\n");
    subject subjects[NUMB_SUBJECT];
    int k;
    for (i = 0; i < NUMB_SUBJECT; i++)
    {
        printf("Subject #%i: ", i + 1);
        scanf("%s", &subjects[i].name);
        getchar();
    }
    printf("Enter first name, last name, group and grade of the subject:\n");
    for (i = 0; i < NUMB_STUDENTS; i++)
    {
        printf("Student #%i:\nName: ", i + 1);
        scanf("%s", &students[i].name);
        printf("Surname: ");
        scanf("%s", &students[i].surname);
        printf("Group: ");
        scanf("%s", &students[i].group);
        {
            for (j = 0; j < NUMB_SUBJECT; j++)
            {
                printf("Assessment in %s ===> ", subjects[j].name);
                scanf("%f", &students[i].score[j]);
                if (students[i].score[j] > 12 || students[i].score[j] < 1)
                {
                    printf("You enter wrong score!");
                    return 1;
                }
            }
            getchar();
        }
    }
    printf("%-12s %-12s %-12s ", NAME_STRING, SURNAME_STRING, GROUP_STRING);
    for (i = 0; i < NUMB_SUBJECT; i++)
        printf("%-12s", subjects[i].name);
    printf("\n");
    for (i = 0; i < NUMB_STUDENTS; i++)
    {
        printf("%-12s %-12s %-12s ", students[i].name, students[i].surname, students[i].group);
        for (j = 0; j < NUMB_SUBJECT; j++)
            printf(" %-10.0f ", students[i].score[j]);
        printf("\n");
    }
    float amount = 0;
    for (i = 0; i < NUMB_STUDENTS; i++)
    {
        for (j = 0; j < NUMB_SUBJECT; j++)
            amount += (students[i].score[j]);
        students[i].average = amount / NUMB_SUBJECT;
        amount = 0;
    }
    printf("\nAverage grade of students (column Score)\n");
    printf("\n%-12s %-12s %-12s ", NAME_STRING, SURNAME_STRING, GROUP_STRING);
    for (i = 0; i < NUMB_SUBJECT; i++)
    {
        printf("%-12s", subjects[i].name);
        if (i == NUMB_SUBJECT - 1)
            printf("%-12s", SCORE_STRING);
    }
    printf("\n");
    for (i = 0; i < NUMB_STUDENTS; i++)
    {
        printf("%-12s %-12s %-12s ", students[i].name, students[i].surname, students[i].group);
        for (j = 0; j < NUMB_SUBJECT; j++)
            printf(" %-10.0f ", students[i].score[j]);
        printf("%-11.1f", students[i].average);
        printf("\n");
    }
    for (i = 0; i < NUMB_STUDENTS - 1; i++)
        for (j = 0; j < NUMB_STUDENTS - i - 1; j++)
            if (students[j + 1].average > students[j].average)
            {
                tmp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = tmp;
            }
    printf("\nStudents are ranked in order of increasing the grade point average per session\n");
    printf("\n%-12s %-12s %-12s ", NAME_STRING, SURNAME_STRING, GROUP_STRING);
    for (i = 0; i < NUMB_SUBJECT; i++)
    {
        printf("%-12s", subjects[i].name);
        if (i == NUMB_SUBJECT - 1)
            printf("%-12s", SCORE_STRING);
    }
    printf("\n");
    for (i = 0; i < NUMB_STUDENTS; i++)
    {
        printf("%-12s %-12s %-12s ", students[i].name, students[i].surname, students[i].group);
        for (j = 0; j < NUMB_SUBJECT; j++)
            printf(" %-10.0f ", students[i].score[j]);
        printf("%-11.1f", students[i].average);
        printf("\n");
    }
    printf("\n\n Press any key: ");
    _getch();
    return 0;
}

4

(37 відповідей, залишених у C++)

ur_naz, нерозумію про що ви

Якщо людина бажає розвиваться, вона питає, якщо ні - виправдовується, а якщо виявляє зворотну агресію, то деградує. Я отримав усі відповіді на свої питання і нажаль не побачив того, чого чекав.

Я написав з метою розвитку і відповів на ваші запитання, чи ви чекали відповідь на запитання такі як:

Ти шо наркоман? Чи ти садист? Чи ти мазохіст?  Чи садомазо? Чи ти аферист?

5

(37 відповідей, залишених у C++)

Дякую, візьму до уваги

6

(37 відповідей, залишених у C++)

ur_naz

Чому ти назвав студента книгою? Ти шо наркоман?

Ну як ти напевне зрозумів, я проходжу тему структури, і ця структура залишилась від попереднього завдання, я не звернув уваги на ім'я структури  і замінив у ній змінні.

Тобто кожен раз треба вводити усі дані? Чи ти садист?

Прочитай будь-ласка уважно завдання

1.    Передбачите введення назв предметів (математичний аналіз, алгебра і т.(д.)

Що таке структурне програмування знаєш?

Так, знаю

А де в тебе сортировка? Чи ти аферист?

Уважніше чийтай будь-ласка

for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - i - 1; j++)
            if (students[j + 1].SR > students[j].SR)
            {
                t = students[j];
                students[j] = students[j + 1];
                students[j + 1] = t;
            }

Де в твоєму коді бодай один коментар?

Ну я пишу без коментарів, ну думаю ти правий, викладаючи на форму, потрібно було написати коментарів, щоб інші розуміли.

7

(37 відповідей, залишених у C++)

Доброго дня всім!
Виконав завдання яке дали в коледжі (На С). Викладачі подивилися і сказали "Добре добре, молодець"
А я хочу просто дізнатись чи можна було зробити краще і компактніше, одним словом крити, щоб люди які мають певний досвід, вказали на мої помилки.

Ось завдання:
Написати програму аналізу середньої успішності чотирьох студентів по чотирьох предметах за сесію на основі структурного типу даних. Виконаєте усереднювання оцінок для кожного студента.
1.    Передбачите введення назв предметів (математичний аналіз, алгебра і т.(д.) і визначите їх у вигляді ініціалізаторів структури.
2.    Застосуєте оператора typedef для визначення структурного типу даних.
3.    Розташуєте прізвища (з іменами) студентів в порядку зростання їх середнього балу за сесію.

І моє вирішення:

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#define N 40
typedef struct
{
    char student_name[N];
    char student_surname[N];
    char student_group[N];
    char predmet[N];
    float score1;
    float score2;
    float score3;
    float score4;
    float SR;
} book;

int main()
{
    char name[] = {"Name"};
    char surname[] = {"Surname"};
    char group[] = {"Group"};
    char score[] = {"Score"};
    printf("Enter the number of students: ");
    unsigned int n;
    scanf("%i", &n);
    if (n < 4)
    {
        printf("Minimum number of students is 4!");
        return 1;
    }
    book students[n], t;
    printf("Enter Subjects:\n");
    for (int i = 0; i < 4; i++)
    {
        printf("Subject #%i: ", i + 1);
        scanf("%s", &students[i].predmet);
    }
    printf("%-12s %-12s %-12s %-12s %-12s %-12s %-12s \n", name, surname, group, students[0].predmet, students[1].predmet, students[2].predmet, students[3].predmet);
    for (int i = 0; i < n; i++)
    {
        scanf("%s %s %s %f %f %f %f", &students[i].student_name, &students[i].student_surname, &students[i].student_group, &students[i].score1, &students[i].score2, &students[i].score3, &students[i].score4);
        if (students[i].score1 > 12 || students[i].score1 < 1 || students[i].score2 > 12 || students[i].score2 < 1 || students[i].score3 > 12 || students[i].score3 < 1 || students[i].score4 > 12 || students[i].score4 < 1)
        {
            printf("You enter wrong score!");
            return 1;
        }
    }
    printf("%-12s %-12s %-12s %-12s %-12s %-12s %-12s \n", name, surname, group, students[0].predmet, students[1].predmet, students[2].predmet, students[3].predmet);
    for (int i = 0; i < n; i++)
        printf("%-12s %-12s %-12s %-12.0f %-12.0f %-12.0f %-12.0f \n", students[i].student_name, students[i].student_surname, students[i].student_group, students[i].score1, students[i].score2, students[i].score3, students[i].score4);
    for (int i = 0; i < n; i++)
    {
        students[i].SR = (students[i].score1 + students[i].score2 + students[i].score3 + students[i].score4) / 4;
    }
    printf("\nAverage grade of students (column Score)\n");
    printf("%-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s \n", name, surname, group, students[0].predmet, students[1].predmet, students[2].predmet, students[3].predmet, score);
    for (int i = 0; i < n; i++)
        printf("%-12s %-12s %-12s %-12.0f %-12.0f %-12.0f %-12.0f %-12.1f \n", students[i].student_name, students[i].student_surname, students[i].student_group, students[i].score1, students[i].score2, students[i].score3, students[i].score4, students[i].SR);
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - i - 1; j++)
            if (students[j + 1].SR > students[j].SR)
            {
                t = students[j];
                students[j] = students[j + 1];
                students[j + 1] = t;
            }
    printf("\nStudents are ranked in order of increasing the grade point average per session\n");
    printf("%-12s %-12s %-12s %-12s %-12s %-12s %-12s %-12s \n", name, surname, group, students[0].predmet, students[1].predmet, students[2].predmet, students[3].predmet, score);
    for (int i = 0; i < n; i++)
        printf("%-12s %-12s %-12s %-12.0f %-12.0f %-12.0f %-12.0f %-12.1f \n", students[i].student_name, students[i].student_surname, students[i].student_group, students[i].score1, students[i].score2, students[i].score3, students[i].score4, students[i].SR);
    printf("\n\n Press any key: ");
    _getch();
    return 0;
}

І результат:

Прихований текст

https://replace.org.ua/uploads/images/9149/bdb57a73943ae5be0a44134ca209534a.jpg

P.S Так, я користувався Google Translate :3

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void print_a (int **, int, int);
int  max_row (int *, int);
 
int main (void)
{
    int i, k, n, m;
    printf("n = ");     scanf("%d", &n);
    printf("m = ");     scanf("%d", &m);
    if (n<1 || m<1) return 1;
 
    int ** a = (int **) malloc(n * sizeof(int*));       // create array
    if (a == NULL) return 1;
    for (i=0; i<n; i++)
    {
        a[i] = (int *) malloc(m * sizeof(int));
        if (a[i] == NULL)
        {
            for (k=i-1; k>=0; k--)
                free(a[k]);
            free(a);
            return 1;
        }
    }
 
    srand( (unsigned int)time(NULL)/2 );                // fill the array
    for (i=0; i<n; i++)
        for (k=0; k<m; k++)
            a[i][k] = 1 + rand() %100;
 
    print_a(a, n, m);
 
    int nMax = 0;               // found position of maximum element
    int max = max_row(a[nMax], m);
    for (i=1; i<n; i++)
        if ((a[i][k = max_row(a[i], m)]) > a[nMax][max]) max = k, nMax = i;
    printf("\nMaximum element %d found in %d string\n", a[nMax][max], nMax+1);
 
    int t;
    for (i=nMax; i>0; i--)      // step 1
    {
        for (k=0; k<m; k++)
        {
            t = a[i-1][k];
            a[i-1][k] = a[i][k];
            a[i][k] = t;
        }
    }
 
    printf("\nStep 1");
    print_a(a, n, m);
 
    for (k=max; k>0; k--)       // step 2
    {
        for (i=0; i<n; i++)
        {
            t = a[i][k-1];
            a[i][k-1] = a[i][k];
            a[i][k] = t;
        }
    }
 
    printf("\nStep 2");
    print_a(a, n, m);
 
    for (i=0; i<n; i++)         // free memory
        free(a[i]);
    free(a);
    return 0;
}
// ------------------------------------------------------------
void print_a (int ** a, int n, int m)
{
    int i, k;
    printf("\n");
    for (i=0; i<n; i++)
    {
        for (k=0; k<m; k++)
            printf("%5d", a[i][k]);
        printf("\n");
    }
}
// ------------------------------------------------------------
int max_row (int * a, int n)
{
    int i, m = 0;
    for (i=1; i<n; i++)
        if (a[i] > a[m]) m = i;
    return m;
}
// ------------------------------------------------------------
FakiNyan написав:

Перестановкою її рядків і стовпців досягти того, щоб найбільший елемент опинився у верхньому лівому куті

це малося на увазі - свапнути найбільший елемент з тим, що в верхньому лівому куті?

Я думаю, що так.

Допоможіть будь-ласка виконати завданна на С:

Дано цілочисельну матрицю розміром N x M.
1). Перестановкою її рядків і стовпців досягти того, щоб найбільший елемент опинився у верхньому лівому куті (3 бали);
2). Знайдіть номер першого з рядків, у якому немає однакових елементів (+ 2 бали).