Дан файл f, содержащий сведения о веществах. Найти удельные веса и названия всех полупроводников. - C (СИ)

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

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

Дан файл f, содержащий сведения о веществах: указывается название вещества, его удельный вес и проводимость (проводник, полупроводник, изолятор). 1) Найти удельные веса и названия всех полупроводников. 2) Выбрать данные о проводниках и упорядочить их по убыванию удельных весов.

Решение задачи: «Дан файл f, содержащий сведения о веществах. Найти удельные веса и названия всех полупроводников.»

textual
Листинг программы
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
 
typedef enum
{
    Conductor = 1,
    Semiconductor = 2,
    Insulator = 3
}Conduction;
 
char* ConductionToStr(Conduction n)
{
    switch(n)
    {
    case 1:
        return "Conductor";
    case 2:
        return "Insulator";
    case 3:
        return "Semiconductor";
    default:
        return "Unknown";
    }
}
 
typedef struct
{
    char name[100];
    Conduction cond;
    double specificWeight;
} Substance;
 
void Swap( Substance * x,  Substance  *y)
{
    Substance  temp = *x;
    *x = *y;
    *y = temp;
}
 
int GetEntriesLength( FILE * inf)
{
    char chartmp[80];
    int len = 0;
    while(fgets(chartmp,80,inf)!= NULL)
        len++;
    return len;
}
 
 
void BubbleSort(Substance arr[], int n)
{
    int i, j;
    for (i = 0; i < n-1; i++)
        for (j = 0; j < n-i-1; j++)
            if (arr[j].specificWeight < arr[j+1].specificWeight)
                Swap(&arr[j], &arr[j+1]);
}
 
void PrintArr(const Substance arr[], int n)
{
    int i = 0;
    printf("Name | Specific Weight | Conduction: \n");
    for(i = 0; i < n;i++)
    {
          printf("%s  %.2lf  %s\n",
               arr[i].name, arr[i].specificWeight,ConductionToStr(arr[i].cond));
    }
}
 
int main(void)
{
    const char* path = "Substanses.txt";
    int arrLen = 0, i = 0;
    FILE* inf = NULL;
    Substance *arr = NULL;
    Substance curr = {"",0,0};
 
    if ((inf = fopen(path,"r")) == NULL)
    {
        fprintf(stderr, "Error in opening file.\n");
        exit(EXIT_FAILURE);
    }
 
    arrLen = GetEntriesLength(inf);
 
    fseek(inf,0,SEEK_SET);
 
    arr= malloc(sizeof(Substance) * arrLen);
 
    for(;;)
    {
        if( fscanf(inf,"%s %lf %u",curr.name, &curr.specificWeight,&curr.cond) != 3)
            break;
        arr[i] = curr;
        i++;
    }
 
 
    PrintArr(arr, arrLen);
 
    BubbleSort(arr,arrLen);
 
    puts("\nSorted Array:");
    PrintArr(arr, arrLen);
 
    fclose(inf);
    free(arr);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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