Помощь - Поиск - Пользователи - Календарь
Полная версия: База данных. Работа со структурами
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Altair
уф... новое.
Цитата
требуется выбрать те типы сырья, в которых содержится более 40% меди и более 45% цинка. Исходнве данные в файле in.txt, с инфой о типе сырья, процентном содержании в нем меди и цинка. файл состоит из m строк. каждая строка содержит наименование сырья процентвное содеражение меди и цинка в нем.
определить m, равное кол-во строк в файле. Динамически выделить память и заполнть данными из файла m структур с шаблоном из 3 полей:
1 поле - содержит наименование i-того сырья
2 проле - содержание меди (%)
3 поле сод. цинка
перебрав 2 и 3 поля опред. сырье в котором содержиться боле 40% меди и более 45 цинка... выходной файл содержит инфу о типах сырья удовлетвор. условиям задачи.
пример входного файла
тип_сырья1 14 67
тип_сырья2 27 34
Altair
#include <stdlib.h>
#include <ctype.h>
#include <iostream.h>
#include <stdio.h>


int filesize(FILE *ft)
{
int n=0; char b[256];
while (!feof(ft)) {if (fgets(b,255,ft)!=NULL) {n=n+1;} }
return (n);
}

int main()
{
FILE *fp, *fo;
int n,i;
struct uddb{ char name[50]; int cu; int zn;} *ptr;

if ((fp=fopen("input.txt","r")) == NULL) {
printf("Error open file");
exit(1);
}

if ((fo=fopen("out.txt","w")) == NULL) {
printf("Error open file");
exit(1);
}
n=filesize(fp);
//printf("filesize = %d",filesize(fp));
ptr=(struct uddb*)malloc(n*sizeof(struct uddb));
fseek(fp,0,SEEK_SET);
for (i=0; i<n; i++){
fscanf(fp,"%s %d %d",ptr->name+i,ptr->cu+i,ptr->zn+i);
}



fclose(fp);
fclose(fo);
return 0;
}


файл input.txt
Цитата
nam1 12 34
nam2 34 54
na23 34 34
volvo
To: Altair
scanf поменяй на такой:
fscanf(fp,"%s %d %d",(ptr+i)->name,&((ptr+i)->cu),&((ptr+i)->zn));
wink.gif
Altair
Вот написал все... есть ошибки или неточности ?
(работает по заданию...
)
вх. файл:
Цитата
nam1 12 34
nam2 34 54
nam3 34 54
na24 45 56
na25 67 34

вывела
Цитата
na24


#include <stdlib.h>
#include <ctype.h>
#include <iostream.h>
#include <stdio.h>


int filesize(FILE *ft)
{
int n=0; char b[256];
while (!feof(ft)) {if (fgets(b,255,ft)!=NULL) {n=n+1;} }
return (n);
}

int main()
{
FILE *fp, *fo;
int n,i;
struct uddb{ char name[50]; int cu; int zn;} *ptr;

if ((fp=fopen("input.txt","r")) == NULL) {
printf("Error open file");
exit(1);
}

if ((fo=fopen("out.txt","w")) == NULL) {
printf("Error open file");
exit(1);
}
n=filesize(fp);
//printf("filesize = %d",filesize(fp));
ptr=(struct uddb*)malloc(n*sizeof(struct uddb));
fseek(fp,0,SEEK_SET);
for (i=0; i<n; i++){
fscanf(fp,"%s %d %d",(ptr+i)->name,&((ptr+i)->cu),&((ptr+i)->zn));
}
fclose(fp);
for (i=0; i<n; i++){
if ((((ptr+i)->cu)>40)&&(((ptr+i)->zn)>45)) { fprintf(fo,"%s ",(ptr+i)->name); }
}

fclose(fo);
free(ptr);
return 0;
}
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.