Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2009, 13:53   #1
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию C++. Структура.

Задание:

Для хранения данных о цветных планшетных сканерах описать структуру вида:
struct scan_info(
char model[25]; // наименование модели
int price; // цена
double x_size; // горизонтальный размер области сканирования
double y_size; // вертикальный размер области сканирования
int optr; // оптическое разрешение
int grey: // число градаций серого
}:
Написать функцию, которая записывает в бинарный файл данные о сканере из
приведенной структуры. Структура файла: в первых двух байтах размещается
значение типа int, определяющее количество сделанных в файл записей; далее
без пропусков размещаются записи о сканерах.
Написать функцию, которая извлекает из этого файла данные о сканере в структуру
типа scan__info. Обязательный параметр - номер требуемой записи. Функция
должна возвращать нулевое значение, если чтение прошло успешно, и -1 в
противном случае.
Привести пример программы, создающей файл с данными о сканерах (данные
вводятся с клавиатуры) - 6-8 записей и выводящей на дисплей данные о запро-
шенной записи.
Все необходимые данные для функций должны передаваться им в качестве пара-
метров. Использование глобальных переменных в функциях не допускается.


Помогите понять, что именно требуется в задании, а то я понял только то что надо создать структуру. Как то не по русски написано задание=(.
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 12.11.2009, 01:28   #2
Lemo
Форумчанин
 
Аватар для Lemo
 
Регистрация: 13.10.2008
Сообщений: 714
Радость

Давай попробую обьяснить:
1.Описываешь структуру
2.Инициализацию полей структуры можно сделать отдельной функцией
3.Функция записи файл(Пишем сначала сколько записей сделано(можно завести переменную при инициализации записей, так званный "счетчик"), дальше мы записываем в файл инициализированые записи нашей структуры
4.Пишем функцию scan__info, как параметр можно взять счетчик из пункта 3.

Что касаеться запрета на глобальные переменные, юзайте передачу по ссылке...
Lemo вне форума Ответить с цитированием
Старый 22.11.2009, 15:53   #3
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

есть вот такой код, проверте плиз на правильность, чтото компилятору не нравится работать со
Код:
string
Код:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <time.h>
#include <string>

// Задание:
/*Вариант 15
1. Описать структуру с именем ZNAK, содержащую следующие поля:
   NAME - фамилия, имя;
   ZODIAC - знак Зодиака;
   BDAY - день рождения (массив из трех чисел).
2. Написать программу, выполняющую следующие действия:
   ввод с клавиатуры данных в массив BOOK, состоящий из восьми элементов 
типа ZNAK; записи должны быть упорядочены по датам дней рождения;
   вывод на экран информации о человеке, чья фамилия введена с клавиа-
туры;
   если такого нет, выдать на дисплей соответствующее сообщение.*/

struct znak
{
string name;
string zodiac;
int bday[3];
};

int main()
{
	
	const int n=8;
	
	string s;
	int tmp;
	
	znak book[n];
	
	for (int i = 0; i < n; i++) {
		std::cout << "Vvedite FIO " << std::endl;
		std::cin >> book[i].name;
		std::cout << "Vvedite znak zodiaca "<< std::endl;
		std::cin >> book[i].zodiac;
		for (int j = 0; j<3; j++) {
			std::cout << "Vvedite vvedite daHHble Bday "<<j+1<<"-ого chelobeka "<< std::endl;
			std::cin >> book[i].bday[j];
		}
	}
	for (int i=n-1; i > n; i--){
		for (int j = 0; j<3; j++){
        if (book[i].bday[j]>book[i].bday[j+1]) 
		{
            tmp = book[i].bday[j];
            book[i].bday[j] = book[i].bday[j+1];
            book[i].bday[j] = tmp;
			}
		}
	}

	 std::cout << "Vvedite FIO kotoroe xotite vivesti " << std::endl;
	 std::cin >> s;
	 for (int i = 0; i < n; i++) {
				if (s == book[i].name) {
					std::cout <<book[i].name << "\n" << std::endl;
					std::cout <<book[i].zodiac << "\n" << std::endl;
					for (int j = 0; j < n; j++){
							std::cout << book[i].bday[j] << "\n" << std::endl;
					}
				}
				else std::cout << "Takix Het" << std::endl;
	 }

	system("pause");
}
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 22.11.2009, 16:00   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

string, так же как и cout и как любой другой класс из стандартной библиотеки находится в пространстве имён std, потому:
Код:
std::string name;
std::string zodiak;
netrino вне форума Ответить с цитированием
Старый 22.11.2009, 16:15   #5
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Спасибо очень помог=)
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 23.11.2009, 19:45   #6
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Код:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <time.h>
#include <string>
const int n=3;

struct scan_info
{
char model[25];
int price;
double x_size;
double y_size;
int optr;
int grey;
};

	void main( void )
{
	scan_info scan1[n];

FILE *file;
char* OutFile = "file.txt";

file = fopen( OutFile, "w" );

	for ( int i = 0; i<n; i++){
		std::cout << "Vvedite Model scanera \n" << std::endl;
		std::cin >> scan1[i].model;
		fputs ("scan1[i].model", file);

		std::cout << "Vvedite Stoimost scanera \n" << std::endl;
		std::cin >> scan1[i].price;
		fputs ("scan1[i].price", file);

		std::cout << "Vvedite Gorizont o6JIact scanirovaniya \n" << std::endl;
		std::cin >> scan1[i].x_size;
		fputs ("scan1[i].x_size", file);

		std::cout << "Vvedite VertikalHyIO o6JIact scanirovaniya \n" << std::endl;
		std::cin >> scan1[i].y_size;
		fputs ("scan1[i].y_size", file);

		std::cout << "Vvedite Optichestkoe razreshenie \n" << std::endl;
		std::cin >> scan1[i].optr;
		fputs ("scan1[i].optr", file);

		std::cout << "Vvedite Gradaciy serogo \n" << std::endl;
		std::cin >> scan1[i].grey;
		fputs ("scan1[i].grey", file);

	}
	fclose(file);
	return;
}
Вопрос такой: а где собственно искать файл в который я всё это записал?
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 23.11.2009, 20:06   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

В папке, где лежит программа, если запускали из студии, то в папке с проектом
netrino вне форума Ответить с цитированием
Старый 23.11.2009, 20:15   #8
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Спасибо, нашел, вопрос следующий: Почему он в файл записывает название переменных а не её содержимое, и как будет выглядедь код, если надо записать содержимое?
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 23.11.2009, 20:24   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

fputs ("scan1[i].model", file);
Вы же название переменных и записываете.
Как вариант:
Код:
fprintf("Price = %d", scan1[i].price);
Вместо %d подставите нужные буковки для записи double и строки

Только исходя из задания Вы по-ходу не то делаете... Файл нужно открывать бинарным и писать в него целиком всю структуру, а не значения отдельных переменных.
Открыть бинарный файл fopen(FileName, "wb");
Записать в файл структуру fwrite(&scan1[i], 1, sizeof(scan_info), file);
Дальше, думаю, разберётесь, если что поищите по форуму, такое уже обсуждалось
netrino вне форума Ответить с цитированием
Старый 23.11.2009, 21:11   #10
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Код:
FILE *file;
	char* OutFile = "file.txt";

	fopen(OutFile, "wb");
-> вот так вот я создал и открыл Бинарный файл.

Код:
for ( int i = 0; i<n; i++)
		fwrite(&scan1[i], 1, sizeof(scan_info), file);
-> Вот так я в него записал структуру.

fclose(OutFile); -> Вот так закрыл файл.

Прога не компилится, облазил весь форум, ничего похожего не нашел...

И следуюший вопрос: тогда я задания вообще непонимаю, что от меня требуется, препод мне сказал: "Описываешь структуру, загоняешь в неё данные. потом вводишь модель и тебе на экран выводит данные по этой модели. + ко всему надо чтобы структура сохранилась в файл." вот такие его были слова...
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура Superlotles Помощь студентам 5 14.09.2009 23:29
структура hungry Общие вопросы C/C++ 11 25.06.2009 20:31
структура Cpluser Общие вопросы C/C++ 4 16.06.2009 17:42
Структура IF в С++ lebrosha Помощь студентам 3 22.05.2009 00:09
структура cr1mson Общие вопросы C/C++ 3 14.01.2009 18:08