Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Файлы и функции 
:(
    Опции темы
Greeneyes
Дата 23.3.2007, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 23.3.2007

Репутация: нет
Всего: нет



Халлоу всем, всем, всем... smile 
не могли бы вы мне помочь...у меня тут прям беда...бедище smile ...у меня тут вот что...
Для хранения данных о цветных планшетных сканерах описать структуру вида :
Код

struct scan_info{
char model[25]:       // наименование модели
int price:                // цена
double x_s1ze:        // горизонтальный размер области сканирования
double y_s1ze;        // вертикальный размер области сканирования
int optr:             // оптическое разрешение
int grey;             // число градаций серого
};

Написать функцию, которая динамически выделяет память под массив структур (не меньше шести элементов), заполняет его данными в режиме диалога, и записывает массив в бинарный файл. Структура файла: в первых двух байтах размещается значение типа int, определяющее количество сделанных в файл записей; далее без пропусков размещаются записи о сканерах.
Написать функцию, которая запрашивает данные о сканере в режиме диалога и замещает записи в бинарном файле по заданному номеру. Обязательный параметр — номер замещаемой записи. Функция должна возвращать нулевое значение, если запись прошла успешно, и -1 в противном случае.
Привести пример программы, создающей файл с данными о сканерах (данные вводятся с клавиатуры) из не менее восьми записей и осуществляющий вставку новых данных о сканере.
Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
и я не знаю как это делать smile ....может у кого-нибуть, что-нибудь подобное в жизни случалось...помогите, а? smile 

Это сообщение отредактировал(а) Alexeis - 26.3.2007, 13:05
PM MAIL   Вверх
GIK
Дата 28.3.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 4
Всего: 14



Вот, написал кое что smile
Можешь переделать под свои нужды, пока програмка позволяет вводить данные в файл и заменять данные в файле на новые указывая эллемент.

Код

#include<stdio>
#include<conio>
#include<cstdio>
#include<string>
#include<stdlib>
#include<iostream>
#include<fstream>

using namespace std;

struct scan_info{
 char model[25];    //
 int price;         //
 int x_s1ze;        //
 int y_s1ze;        //
 int optr;          //
 int grey;          //
};

void replacement(scan_info *sc_inf[], int del, int for_point, int for_size, ostream &out, int n);

void replacement(scan_info *sc_inf[], int ind, int for_point, int for_size, ostream &out, int n){


  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[ind]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[ind]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[ind]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[ind]->grey;

  out.seekp(for_point);

  out<<sc_inf[ind]->model;
  out<<sc_inf[ind]->price;
  out<<sc_inf[ind]->x_s1ze;
  out<<sc_inf[ind]->y_s1ze;
  out<<sc_inf[ind]->optr;
  out<<sc_inf[ind]->grey;

  for(int i=ind+1; i<n; i++){
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
};
 void del_ellement(scan_info *sc_inf[], int del, int for_point, ostream &out, int n){

   out.seekp(for_point);
   for(int i=(del+1); i<n; i++){
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
 }

void main()
{
 scan_info *sc_inf[3];
 int i, j, n=3, del;

 for(i=0; i<n; i++) {
 sc_inf[i]=(scan_info *) malloc(sizeof(scan_info));
 }



  int collector=0; /*Ñîáèðàòåëü*/


 for(i=0; i<n; i++){
  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[i]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[i]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[i]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[i]->grey;


 }

 ofstream out("C://test/test2.txt", ios::out | ios::binary);
 if(!out){
  cout<<"Not File"<<endl;
  getch();
  return;
 }


 int for_point[3];
 int for_size[3];

 int pr=2;
 out.seekp(pr);

 for(i=0; i<n; i++){
 out<<sc_inf[i]->model;
 out<<sc_inf[i]->price;
 out<<sc_inf[i]->x_s1ze;
 out<<sc_inf[i]->y_s1ze;
 out<<sc_inf[i]->optr;
 out<<sc_inf[i]->grey;

 collector=0;
 int ran=sc_inf[i]->price;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->x_s1ze;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->y_s1ze;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->optr;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->grey;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }

 for_point[i]=pr;
 for_size[i] =strlen(sc_inf[i]->model)+collector;
 pr+=strlen(sc_inf[i]->model)+collector;

}


 int zam; int bb=1;
 cout<<"Vvedite ellement na zameni:";
 cin>>zam;
 if(zam>n || zam<0){
  bb=0;
  cout<<"No correct"<<endl;
 }
 zam--;
 if(bb){
  replacement(sc_inf, zam, for_point[zam], for_size[zam], out, n);
 }

 out.close();

getch();

}



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
shokky
Дата 29.3.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 23.3.2007

Репутация: нет
Всего: нет



а у меня такая же задача....и я не знаю как её делать...а Greeneyes что то тему не стал развивать...

GIK, спасибо, ...да что там просто СПАСИБИЩЕ тебе за помощь....

вот только не знаю....может у Greeneyes все заработало....а у меня выдало сначало 12 ошибок...потом после подстановки h в конце подключения всех модулей стало выдавать 2 ошибки и 1 ворнинг...

GIK...можно тебя попросить посмотреть ошибки...и если не трудно чуток закоментировать код...

очень надеюсь на твою помощь....заранее тебе БОООЛЬШОЕ пасиба smile 

Код

#include<stdio.h>
#include<conio.h>  
#include<cstdio.h>  //мне тут пишет unable to open include file...посиму?
#include<string.h>
#include<stdlib.h>
#include<iostream.h>
#include<fstream.h>

using namespace std;  //мне тут пишет declaration error...посиму?

struct scan_info{
 char model[25];    //
 int price;         //
 int x_s1ze;        //
 int y_s1ze;        //
 int optr;          //
 int grey;          //
};

void replacement(scan_info *sc_inf[], int del, int for_point, int for_size, ostream &out, int n);  //почему сразу две функции объявляются и что они делают?

void replacement(scan_info *sc_inf[], int ind, int for_point, int for_size, ostream &out, int n){


  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[ind]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[ind]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[ind]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[ind]->grey;

  out.seekp(for_point);

  out<<sc_inf[ind]->model;   //это специальная функция вывода такая?
  out<<sc_inf[ind]->price;
  out<<sc_inf[ind]->x_s1ze;
  out<<sc_inf[ind]->y_s1ze;
  out<<sc_inf[ind]->optr;
  out<<sc_inf[ind]->grey;

  for(int i=ind+1; i<n; i++){    //что делает цикл?
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
};
 void del_ellement(scan_info *sc_inf[], int del, int for_point, ostream &out, int n){

   out.seekp(for_point);
   for(int i=(del+1); i<n; i++){    //что делает цикл?
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
 }

void main()
{
 scan_info *sc_inf[3];
 int i, j, n=3, del;

 for(i=0; i<n; i++) {          // что делает цикл и что такое malloc?
 sc_inf[i]=(scan_info *) malloc(sizeof(scan_info));
 }



  int collector=0; /*Ñîáèðàòåëü*/


 for(i=0; i<n; i++){           //что делает цикл?
  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[i]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[i]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[i]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[i]->grey;


 }

 ofstream out("C://test/test2.txt", ios::out | ios::binary);
 if(!out){
  cout<<"Not File"<<endl;
  getch();
  return;
 }


 int for_point[3];
 int for_size[3];

 int pr=2;
 out.seekp(pr);

 for(i=0; i<n; i++){
 out<<sc_inf[i]->model;
 out<<sc_inf[i]->price;
 out<<sc_inf[i]->x_s1ze;
 out<<sc_inf[i]->y_s1ze;
 out<<sc_inf[i]->optr;
 out<<sc_inf[i]->grey;

 collector=0;
 int ran=sc_inf[i]->price;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->x_s1ze;      //а что значит вот такая запись -> ?
 while(ran!=0){    //что делает цикл?
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->y_s1ze;
 while(ran!=0){      //зачем 4 раза одно и тоже?
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->optr;
 while(ran!=0){        
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->grey;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }

 for_point[i]=pr;          //что делает цикл?
 for_size[i] =strlen(sc_inf[i]->model)+collector;     //мне тут пишет parametr for_size is never used...
 pr+=strlen(sc_inf[i]->model)+collector;

}


 int zam; int bb=1;
 cout<<"Vvedite ellement na zameni:";
 cin>>zam;
 if(zam>n || zam<0){
  bb=0;
  cout<<"No correct"<<endl;
 }
 zam--;
 if(bb){
  replacement(sc_inf, zam, for_point[zam], for_size[zam], out, n);
 }

 out.close();

getch();

} 


очень извиняюся за убийственное кол-во вопросов... smile 

Это сообщение отредактировал(а) shokky - 29.3.2007, 19:58
PM MAIL   Вверх
GIK
Дата 29.3.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 4
Всего: 14



Да без проблем smile

Код

#include<stdio.h>
#include<conio.h>  
#include<cstdio.h>  //мне тут пишет unable to open include file...посиму?
#include<string.h>
#include<stdlib.h>
#include<iostream.h>
#include<fstream.h>

using namespace std;  //мне тут пишет declaration error...посиму?
/*
Какой компилер? Возможно не все библиотеки подключил
*/


struct scan_info{
 char model[25];    //
 int price;         //
 int x_s1ze;        //
 int y_s1ze;        //
 int optr;          //
 int grey;          //
};

void replacement(scan_info *sc_inf[], int del, int for_point, int for_size, ostream &out, int n);  //почему сразу две функции объявляются и что они делают?
/*
 Первое это объявление, второе определение
*/
void replacement(scan_info *sc_inf[], int ind, int for_point, int for_size, ostream &out, int n){


  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[ind]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[ind]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[ind]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[ind]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[ind]->grey;

  out.seekp(for_point);

  out<<sc_inf[ind]->model;   //это специальная функция вывода такая?
 /*
  out - это поток, его передали в эту функцию по ссылке.
 определили поток в main() так:
 ofstream out("C://test/test2.txt", ios::out | ios::binary);
 << -оператор вывода, выводит данные из  sc_inf[ind]->model
 

 */
  out<<sc_inf[ind]->price;
  out<<sc_inf[ind]->x_s1ze;
  out<<sc_inf[ind]->y_s1ze;
  out<<sc_inf[ind]->optr;
  out<<sc_inf[ind]->grey;

  for(int i=ind+1; i<n; i++){    //что делает цикл?
  /*По логике дописываем оставшиеся данные из после заменяемого
 */
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
};
 void del_ellement(scan_info *sc_inf[], int del, int for_point, ostream &out, int n){

   out.seekp(for_point);
   for(int i=(del+1); i<n; i++){    //что делает цикл?
  /*
  Тупо дописывает эллементы после удаляемого по индекчу del
  out.seekp(for_point) установит позицию где начинается удаляемый эллемент
 for_point=for_point[zam] - передали значение которое фиксировали в массив for_point,
  когда определяли размеры и позиции.
 */
     out<<sc_inf[i]->model;
     out<<sc_inf[i]->price;
     out<<sc_inf[i]->x_s1ze;
     out<<sc_inf[i]->y_s1ze;
     out<<sc_inf[i]->optr;
     out<<sc_inf[i]->grey;
    }
 }

void main()
{
 scan_info *sc_inf[3];
 int i, j, n=3, del;

 for(i=0; i<n; i++) {          // что делает цикл и что такое malloc?
 /*
  Распределяем память для объектов - структур
*/
 sc_inf[i]=(scan_info *) malloc(sizeof(scan_info));
 }



  int collector=0; /*Ñîáèðàòåëü*/


 for(i=0; i<n; i++){           //что делает цикл?
 /*
  Вводим данные в структуру, потом из структуры будем вводить в файл
 */
  cout<<"VVedite model:"<<endl;
  cin>>sc_inf[i]->model;
  cout<<"VVedite cenu:"<<endl;
  cin>>sc_inf[i]->price;
  cout<<"VVedite gorizontalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->x_s1ze;
  cout<<"VVedite vertikalniy razmer oblasti skanirovania:"<<endl;
  cin>>sc_inf[i]->y_s1ze;
  cout<<"VVedite opticheskoe razreshenie:"<<endl;
  cin>>sc_inf[i]->optr;
  cout<<"VVedite chislo gradaciy serova:"<<endl;
  cin>>sc_inf[i]->grey;


 }

 ofstream out("C://test/test2.txt", ios::out | ios::binary);
 if(!out){
  cout<<"Not File"<<endl;
  getch();
  return;
 }


 int for_point[3];
 int for_size[3];

 int pr=2;
 out.seekp(pr);

 for(i=0; i<n; i++){
 out<<sc_inf[i]->model;
 out<<sc_inf[i]->price;
 out<<sc_inf[i]->x_s1ze;
 out<<sc_inf[i]->y_s1ze;
 out<<sc_inf[i]->optr;
 out<<sc_inf[i]->grey;

 collector=0;
 int ran=sc_inf[i]->price;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->x_s1ze;      //а что значит вот такая запись -> ?
 /*
  Так используется обращение к данным через указатель на объект, например
 чтобы взять данные на которые указывает обычный указатель на типа int, нужно писать так:
 int r = 123;
 int *rr=&r;
 int r2= *rr; //передали значение на которе указывает указатель rr
 а через указатель на объект обращаются так: ->
 
 */
 while(ran!=0){    //что делает цикл?
 /*
  Определяет "длину" числа, т.е. из скольки символов состоит 
 деление на десять, "сокращает" число на один символ, например
 123 / 10 = 12 , интовые переменные округлят чило
 12 / 10 = 1 
 1 / 10 =0 
 В итоге вычислили что число сотоит из 3 знаков
 */
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->y_s1ze;
 while(ran!=0){      //зачем 4 раза одно и тоже?
 /*Не 4 , а пять :)
 пять целочислительных переменных используются для данных о товаре
 переменная,  collector вычислет длину всех чисел, для того чтобы определить позиции данных 
 записываемых в файл, о товаре.
 pr+=strlen(sc_inf[i]->model)+collector; 
 pr - позиция каждого эллемента в файле
 strlen(sc_inf[i]->model) - длина имени товара
 collector -  сколько чисел насобирали  :)
 в итоге получается длина из символов, ее нужно учесть чтобы использовать в других действиях, 
 например удаление или перемещение данных в файле

 */
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->optr;
 while(ran!=0){        
  ran=ran/10;
  collector++;
 }
 ran=sc_inf[i]->grey;
 while(ran!=0){
  ran=ran/10;
  collector++;
 }

 for_point[i]=pr;          //что делает цикл?
/*
 Это не цикл, а имя массива for_point, тебя что for в имени смутил ;)
 
 */
 for_size[i] =strlen(sc_inf[i]->model)+collector;     //мне тут пишет parametr for_size is never used...
 pr+=strlen(sc_inf[i]->model)+collector;

}


 int zam; int bb=1;
 cout<<"Vvedite ellement na zameni:";
 cin>>zam;
 if(zam>n || zam<0){
  bb=0;
  cout<<"No correct"<<endl;
 }
 zam--;
 if(bb){
  replacement(sc_inf, zam, for_point[zam], for_size[zam], out, n);
 }

 out.close();

getch();

}  

Вроде корректно, но советую почитать книгу по C++, а потом уже думать о алгоритмах, хотя....
если нравится думать сейчас, то думай smile Вдруг идеи новые возникнут smile



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Xenon
Дата 30.3.2007, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 19
Всего: 50



Осипипеный вариант smile
Код

#include <iostream>
#include <string>
#include <fstream>

struct scan_info
{
    char model[25];       // наименование модели
    int price;            // цена
    double x_size;        // горизонтальный размер области сканирования
    double y_size;        // вертикальный размер области сканирования
    int optr;             // оптическое разрешение
    int grey;             // число градаций серого
};

int add(scan_info* scan_arr, int count)
{
    scan_arr = new scan_info[count];
    for (int i = 0; i < count; ++i)
    {
        std::cout << "Enter model: ";
        std::cin >> scan_arr[i].model;
        std::cout << "Enter price: ";
        std::cin >> scan_arr[i].price;
        std::cout << "Enter x size: ";
        std::cin >> scan_arr[i].x_size;
        std::cout << "Enter y size: ";
        std::cin >> scan_arr[i].y_size;
        std::cout << "Enter optical resolution: ";
        std::cin >> scan_arr[i].optr;
        std::cout << "Enter the number of shade of gray: ";
        std::cin  >> scan_arr[i].grey;
    }
    std::string path;
    std::cout << "Enter path to file: ";
    std::cin >> path;
    std::fstream file(path.c_str(),std::ios::out | std::ios::binary);
    if (!file)
    {
        return -1;
    }
    file.write(reinterpret_cast<char*>(&count),sizeof(int));
    for (int i = 0; i < count; ++i)
    {
        file.write(reinterpret_cast<char*>(&scan_arr[i]),sizeof(scan_info));
    }
    file.close();
    return 0;
}

int replace(const std::string& path, int position)
{
    std::fstream file(path.c_str(),std::ios::in | std::ios::out | std::ios::binary);
    if (!file)
    {
        return -1;
    }
    int count = 0;
    file.read(reinterpret_cast<char*>(&count),sizeof(int));
    if (position < 0 || position > count)
    {
        return -1;
    }
    scan_info scaner;
    std::cout << "Enter model: ";
    std::cin >> scaner.model;
    std::cout << "Enter price: ";
    std::cin >> scaner.price;
    std::cout << "Enter x size: ";
    std::cin >> scaner.x_size;
    std::cout << "Enter y size: ";
    std::cin >> scaner.y_size;
    std::cout << "Enter optical resolution: ";
    std::cin >> scaner.optr;
    std::cout << "Enter the number of shade of gray: ";
    std::cin  >> scaner.grey;
    file.clear();
    file.seekg(sizeof(int)+sizeof(scan_info)*position,std::ios::beg);
    file.write(reinterpret_cast<char*>(&scaner),sizeof(scan_info));
    file.close();
    return 0;
}

int read(const std::string& path, scan_info* scan_arr)
{
    std::fstream file(path.c_str(),std::ios::in | std::ios::binary);
    if (!file)
    {
        return -1;
    }
    int count = 0;
    file.read(reinterpret_cast<char*>(&count),sizeof(int));
    scan_arr = new scan_info[count];
    for (int i = 0; i < count; ++i)
    {
        std::cout << i << std::endl;
        file.read(reinterpret_cast<char*>(&scan_arr[i]),sizeof(scan_info));
        std::cout << "Enter model: " << scan_arr[i].model << std::endl;
        std::cout << "Enter price: " << scan_arr[i].price << std::endl;
        std::cout << "Enter x size: " << scan_arr[i].x_size << std::endl;
        std::cout << "Enter y size: " << scan_arr[i].y_size << std::endl;
        std::cout << "Enter optical resolution: " << scan_arr[i].optr << std::endl;
        std::cout << "Enter the number of shade of gray: " << scan_arr[i].grey << std::endl;
    }
    file.close();
    return 0;
}
int main(int argc, char* argv[])
{
    scan_info* pTr = NULL;
    std::string path;
    int count = 0;
    int position = 0;
    std::cout << "Enter number of scaners: ";
    std::cin >> count;
    add(pTr,count);
    std::cout << "Enter path to file: ";
    std::cin >> path;
    std::cout << "Enter the position of the detachable field: ";
    std::cin >> position;
    replace(path,position);
    delete [] pTr;
    read(path,pTr);
    delete [] pTr;
    _flushall(); 
    getchar();
    return 0;
}




--------------------
user posted image  
PM MAIL   Вверх
shokky
Дата 30.3.2007, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 23.3.2007

Репутация: нет
Всего: нет



Xenon,  smile  спасибки...но у меня при запуске выдается 25 ошибок smile .....в каждой строчке типа как 20.... smile  


GIK, ОООгромнейшее тебе спасиба ... smile  smile  smile ...
а мона еще спросить....обязательно надо создавать файл именно в этом месте "C://test/test2.txt"...и как там что надо писать....если не сложно приведи примерчик пожалуйста.... smile 
PM MAIL   Вверх
apook
Дата 30.3.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



GIK
Цитата

Структура файла: в первых двух байтах размещается значение типа int, определяющее количество
сделанных в файл записей; далее без пропусков размещаются записи о сканерах.

Соблюсти надо наверно было smile

и интересно ты организовал выделение памяти указателей на массивы структур, конечно ничто не мешает массиву состоять из одного элемента но все-же 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Xenon
Дата 30.3.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 19
Всего: 50



shokky, какой компилятор? Borland 3.1?

Добавлено @ 12:38
Код

#include <iostream.h>
#include <string.h>
#include <fstream.h>

struct scan_info
{
    char model[25];       // наименование модели
    int price;            // цена
    double x_size;        // горизонтальный размер области сканирования
    double y_size;        // вертикальный размер области сканирования
    int optr;             // оптическое разрешение
    int grey;             // число градаций серого
};

int add(scan_info* scan_arr, int count)
{
    scan_arr = new scan_info[count];
    for (int i = 0; i < count; ++i)
    {
        cout << "Enter model: ";
        cin >> scan_arr[i].model;
        cout << "Enter price: ";
        cin >> scan_arr[i].price;
        cout << "Enter x size: ";
        cin >> scan_arr[i].x_size;
        cout << "Enter y size: ";
        cin >> scan_arr[i].y_size;
        cout << "Enter optical resolution: ";
        cin >> scan_arr[i].optr;
        cout << "Enter the number of shade of gray: ";
        cin  >> scan_arr[i].grey;
    }
    string path;
    cout << "Enter path to file: ";
    cin >> path;
    fstream file(path.c_str(), out | binary);
    if (!file)
    {
        return -1;
    }
    file.write(reinterpret_cast<char*>(&count),sizeof(int));
    for (int i = 0; i < count; ++i)
    {
        file.write(reinterpret_cast<char*>(&scan_arr[i]),sizeof(scan_info));
    }
    file.close();
    return 0;
}

int replace(const string& path, int position)
{
    fstream file(path.c_str(),in | out | binary);
    if (!file)
    {
        return -1;
    }
    int count = 0;
    file.read(reinterpret_cast<char*>(&count),sizeof(int));
    if (position < 0 || position > count)
    {
        return -1;
    }
    scan_info scaner;
    cout << "Enter model: ";
    cin >> scaner.model;
    cout << "Enter price: ";
    cin >> scaner.price;
    cout << "Enter x size: ";
    cin >> scaner.x_size;
    cout << "Enter y size: ";
    cin >> scaner.y_size;
    cout << "Enter optical resolution: ";
    cin >> scaner.optr;
    cout << "Enter the number of shade of gray: ";
    cin  >> scaner.grey;
    file.clear();
    file.seekg(sizeof(int)+sizeof(scan_info)*position,std::ios::beg);
    file.write(reinterpret_cast<char*>(&scaner),sizeof(scan_info));
    file.close();
    return 0;
}

int read(const string& path, scan_info* scan_arr)
{
    fstream file(path.c_str(), in | binary);
    if (!file)
    {
        return -1;
    }
    int count = 0;
    file.read(reinterpret_cast<char*>(&count),sizeof(int));
    scan_arr = new scan_info[count];
    for (int i = 0; i < count; ++i)
    {
        cout << i << endl;
        file.read(reinterpret_cast<char*>(&scan_arr[i]),sizeof(scan_info));
        cout << "Enter model: " << scan_arr[i].model << endl;
        cout << "Enter price: " << scan_arr[i].price << endl;
        cout << "Enter x size: " << scan_arr[i].x_size << endl;
        cout << "Enter y size: " << scan_arr[i].y_size << endl;
        cout << "Enter optical resolution: " << scan_arr[i].optr << endl;
        cout << "Enter the number of shade of gray: " << scan_arr[i].grey << endl;
    }
    file.close();
    return 0;
}
int main(int argc, char* argv[])
{
    scan_info* pTr = NULL;
    string path;
    int count = 0;
    int position = 0;
    cout << "Enter number of scaners: ";
    cin >> count;
    add(pTr,count);
    cout << "Enter path to file: ";
    cin >> path;
    cout << "Enter the position of the detachable field: ";
    cin >> position;
    replace(path,position);
    delete [] pTr;
    read(path,pTr);
    delete [] pTr;
    _flushall(); 
    getchar();
    return 0;

}


тогда как-то так

Это сообщение отредактировал(а) Xenon - 30.3.2007, 12:40


--------------------
user posted image  
PM MAIL   Вверх
shokky
Дата 30.3.2007, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 23.3.2007

Репутация: нет
Всего: нет



Xenon, а я не знаю smile ...это где надо посмотреть?....у меня такой компилятор который стоит в универе...то есть на котором надо сдавать...и который в твоей последней версии решения выдает 9 ошибок в строчках 36, 41, 42, 44, 50... smile 
поможешь исправить? smile 


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0601 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.