Динамическое выделение памяти / Открытие файла с командной строки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день. Дана задача: Есть информация о альбомах, выданным музыкальной группой: название, год издания, кол-во песен, кол-во клипов, компания, которая выполнила звукозапись, тираж. Найти компанию, с которой группа работала дольше всего и посчитать общее количество клипов и песен. Упорядочить информацию по тиражу методом минимумов. Напечатать в виде таблицы. Нужно использовать динамическое выделение памяти и имя файла вводить в командной строке. Все сделано, кроме нахождения компании, использования динам.выделения памяти и ввода имени файла через командную строку.
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct group
{
    char nazv[30];
    int god;
    int pes;
    int clip;
    char comp[30];
    int tir;
}arr [100];
 
int load (struct group *arr)
{
    int i=0;
    FILE *f=NULL; 
    f=fopen("Input.txt", "rt");
    if (f==NULL)
    {
        printf ("No file!!!\n");
        exit (0);
    }
    for(i=0;i<5;i++)
    {
        fscanf(f,"%s", &arr[i].nazv);
        fscanf(f,"%d", &arr[i].god);
        fscanf(f,"%d", &arr[i].pes);
        fscanf(f,"%d", &arr[i].clip);
        fscanf(f,"%s", &arr[i].comp);
        fscanf(f,"%d", &arr[i].tir);
    }
    fclose (f);
    return 0;
}
 
int sumpes (struct group *t)
{
    int i=0, s=0;   
    for(i=0;i<5;i++)
    {
        s=s+arr[i].pes;
    }
    printf("Summa pesen: %d\n", s);
    return 0;
}
 
int sumclip (struct group *arr)
{
    int i=0, s=0;
    for (i=0; i<5; i++)
    {
        s+=arr[i].clip;
    }
    printf("Summa klipov: %d\n", s);
    return 0;
}
 
int comp (struct group *t)
{
    int i=0, j=0, n=0, max=0;
    struct group temp;
    for (i=0; i<5; i++)
    {
        for (j=0;j<5;j++)
        {
            if(t[i].comp==t[j].comp)
                n++;
        }
        if(n>max)
        {
            max=n;
        }
        n=0;
    }
    printf("n: %d\n", max);
    return 0;
}
 
int sorttir (struct group *t)
{
    int i=0, j=0;
    struct group temp;
    for(i=0;i<5;i++)
    {
        for(j=0; j<4; j++)
        {
            if( t[j].tir > t[j+1].tir )
            {
                temp=t[j];
                t[j]=t[j+1];
                t[j+1]=temp;
            }
            
        }
    }
 
    return 0;
}
 
void main (void)
{
    int n=0, i=0;
L:  printf("1.Load\n2.COMP\n3.Kol-vo pesen\n4.Kol-vo clipov\n5.Sortirovka po tirajy\n6.Quit\n");
    printf ("Input number : ");
    scanf ("%d", &n);
    printf ("\n");
 
    switch (n)
    {
    case 1 : load(arr);
             break;
 
    case 2 : comp(arr);
             break;
 
    case 3 : sumpes (arr);
             break;
 
    case 4 : sumclip (arr);
             break;
 
    case 5 : sorttir (arr);
             break;
 
    case 6 : exit (0);
             break;
    }
    for (i=0;i<5;i++)
    printf("%s %d %d %d %s %d\n",arr[i].nazv,arr[i].god,arr[i].pes,arr[i].clip,arr[i].comp,arr[i].tir);
    printf("\n");
    goto L;
    
}
Заранее благодарен за помощь.

Решение задачи: «Динамическое выделение памяти / Открытие файла с командной строки»

textual
Листинг программы
int comp (struct group *arr)
{
    int i=0, j=0, n=0, max=0;
    for (i=0; i<x; i++)
    {
        for (j=0;j<x;j++)
        {
            if(arr[i].comp==arr[j].comp)
                n++;
        }
        if(n>max)
        {
            max=n;
        }
        n=0;
    }
    printf("n: %d\n", max);
    return 0;
}

Оцени полезность:

8   голосов , оценка 4.5 из 5
Похожие ответы