IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> База данных. Работа со структурами, C
сообщение
Сообщение #1


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


уф... новое.
Цитата
требуется выбрать те типы сырья, в которых содержится более 40% меди и более 45% цинка. Исходнве данные в файле in.txt, с инфой о типе сырья, процентном содержании в нем меди и цинка. файл состоит из m строк. каждая строка содержит наименование сырья процентвное содеражение меди и цинка в нем.
определить m, равное кол-во строк в файле. Динамически выделить память и заполнть данными из файла m структур с шаблоном из 3 полей:
1 поле - содержит наименование i-того сырья
2 проле - содержание меди (%)
3 поле сод. цинка
перебрав 2 и 3 поля опред. сырье в котором содержиться боле 40% меди и более 45 цинка... выходной файл содержит инфу о типах сырья удовлетвор. условиям задачи.
пример входного файла
тип_сырья1 14 67
тип_сырья2 27 34


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


#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


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






To: Altair
scanf поменяй на такой:
fscanf(fp,"%s %d %d",(ptr+i)->name,&((ptr+i)->cu),&((ptr+i)->zn));
wink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Вот написал все... есть ошибки или неточности ?
(работает по заданию...
)
вх. файл:
Цитата
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;
}


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 21:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name