Помощь - Поиск - Пользователи - Календарь
Полная версия: База данных. Работа со структурами
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
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;
}
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.