Дан файл 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д