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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2011, 16:33   #1
Catherina14
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 12
По умолчанию программа по файлам (нужна подсказка)

Задать файл, содержащий координаты левого верхнего и нижнего правого угла прямоугольника – целые числа типа int. Определить площадь каждого прямоугольника, упорядочить эти значения по возрастанию и записать в файл.

подскажите как упорядочить значения, записать в файл и вывести на экран, потому что когда я просто записываю в файл (неупорядоченные площади) в файле идут какие-то символы, и я не могу проверить даже правильность.
Заранее благодарю.

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
struct koord{
	int a;
   int b;
	int c;
   int d;
   	} zap[40], zap1[40],t;
FILE *Fzap;
void main(void)
{	int i,j,a,b,c,d,S,size=sizeof(koord),N,nn=0;
clrscr();

Fzap=fopen("z:\\koord.txt","wb");
puts("Vvedi kol-vo pramoygolnikov ");
fflush(stdin);
scanf("%d",&N);
printf(" n=%d\n",N);
for (j=0; j<N; j++)
{ puts("vvedi a ");
fflush(stdin);
 scanf("%d",&zap[j].a);
 puts("vvedi b");
 fflush(stdin);
 scanf("%d",&zap[j].b);
 puts("vvedi c");
 fflush(stdin);
 scanf("%d",&zap[j].c);
 puts("vvedi d");
 fflush(stdin);
 scanf("%d",&zap[j].d);
fwrite(&zap[j], size, 1, Fzap);

if ((zap[j].c>zap[j].a) && (zap[j].d<zap[j].b)) {
S=fabs((zap[j].c-zap[j].a)*(zap[j].b-zap[j].d));
fwrite(&S, 4, 1, Fzap);}
else puts("\n nevernoe yslovie");
}
puts("\ninfo");
for (j=0; j<N; j++)
{
 	printf("%3d %3d %3d %3d \n",zap[j].a, zap[j].b,zap[j].c,zap[j].d);
}

   fclose(Fzap);
getch();
}
Catherina14 вне форума Ответить с цитированием
Старый 29.06.2011, 18:45   #2
Catherina14
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 12
По умолчанию

теперь я выяснила,что прога присваивает всем площадям значение последней!
в чем ошибка???

Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
struct koord{
	int x1;
   int y1;
	int x2;
   int y2;
   	} zap[100], zap1[100],t;
FILE *Fzap;
void main(void)
{	int i,j,x1,y1,x2,y2,S,size=sizeof(koord),N,nn=0;
clrscr();

Fzap=fopen("d:\\koord.txt","wb");
puts("Vvedi kol-vo pramoygolnikov ");
fflush(stdin);
scanf("%d",&N);
printf(" n=%d\n",N);
for (j=0; j<N; j++)
{ puts("vvedi x1 ");
fflush(stdin);
 scanf("%d",&zap[j].x1);
 puts("vvedi y1");
 fflush(stdin);
 scanf("%d",&zap[j].y1);
 puts("vvedi x2");
 fflush(stdin);
 scanf("%d",&zap[j].x2);
 puts("vvedi y2");
 fflush(stdin);
 scanf("%d",&zap[j].y2);
fwrite(&zap[j], size, 1, Fzap);

if ((zap[j].x2>zap[j].x1) && (zap[j].y2<zap[j].y1)) {
S=fabs((zap[j].x2-zap[j].x1)*(zap[j].y1-zap[j].y2));
fwrite(&S, size, 1, Fzap); }
else puts("\n nevernoe yslovie");
}
 fclose(Fzap);


Fzap=fopen("d:\\koord.txt","rb");
if (!Fzap) {puts("can't open it"); exit(1);}
for (j=0; j<N; j++)
{fread(&zap,1,size,Fzap);

puts("\ninfo");
 	printf("%3d %3d %3d %3d %5d\n",zap[j].x1, zap[j].y1,zap[j].x2,zap[j].y2, S);
}

   fclose(Fzap);
getch();
}
Catherina14 вне форума Ответить с цитированием
Старый 29.06.2011, 19:41   #3
Nedward
Пользователь
 
Регистрация: 26.06.2011
Сообщений: 85
По умолчанию

Нууу, мне лень искать, в чем ошибка у тебя - слишком много си и слишком мало плюсов
Вот рабочий код (я сомневаюсь только на счет формулы расчета площади прямоугольника - не тестировал отрицательные координаты точек X и Y )
Код:
#include <fstream>
#include <iostream>
#include <vector>
#include <locale>
#include <algorithm>

//Имя файла, куда запишутся все площади, отсортированные по возрастанию
#define OUTPUT_FILE_NAME "d:\\abc\\koord.txt"

struct rect
{
	double x1,y1,x2,y2;
	double s;
};

using namespace std;

int main()
{
	setlocale(LC_ALL,"Russian");

	vector<double> mass_s; //массив с площадями прямоугольников
	rect tmp_rect; //временный прямоугольник

	cout << "Введите количество прямоугольников" << endl;
	unsigned int rectangle_num;
	cin >> rectangle_num;
	cout << "Количество прямоугольников равно " << rectangle_num << endl;

	//В цикле читаем координаты всех прямоугольников
	for (unsigned int i=0;i<rectangle_num;i++)
	{
		cout << "Введите последовательно (через пробел) координаты прямоугольника номер "<< i<<" и нажмите enter." << endl;
		cout << "Координаты вводить в таком порядке: X1,Y1,X2,Y2" << endl;
		cin >> tmp_rect.x1 >> tmp_rect.y1 >> tmp_rect.x2 >> tmp_rect.y2;
		//Вычисляем площадь (надеюсь формулу вспомнил правильно :))
		tmp_rect.s = fabs(tmp_rect.x1-tmp_rect.x2)*fabs(tmp_rect.y1-tmp_rect.y2);
		cout << "Площадь прямоугольника равна: " << tmp_rect.s << endl;
		mass_s.push_back(tmp_rect.s);
	}
	//Выводим несортированный список с площадями:
	cout << "Полученные площади:";
	for (vector<double>::iterator i=mass_s.begin();i!=mass_s.end();i++)
	{
		cout << " " << *i << ";";
	}
	cout << endl;
	//Сортируем список
	sort(mass_s.begin(),mass_s.end());
	//Выводим отсортированный список (и, за одним, записываем его в файл):
	ofstream f(OUTPUT_FILE_NAME); //Наш файл, куда будем записывать значения 
	cout << "Отсортированные площади:";
	for (vector<double>::iterator i=mass_s.begin();i!=mass_s.end();i++)
	{
		cout << " " << *i << ";";
		f    << " " << *i << ";";
	}
	cout << endl;
	f.close();
	return 0;
}
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (c) Martin Golding
Nedward вне форума Ответить с цитированием
Старый 29.06.2011, 19:57   #4
Catherina14
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 12
По умолчанию

Спасибо конечно), но к сожалению большинство этих операций мы не проходили((
Catherina14 вне форума Ответить с цитированием
Старый 29.06.2011, 20:04   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
if ((zap[j].x2>zap[j].x1) && (zap[j].y2<zap[j].y1))
Я не понимаю зачем это условие?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.06.2011, 20:10   #6
Catherina14
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 12
По умолчанию

чтобы проверить координаты левого верхнего и нижнего правого угла прямоугольника
это ведь могут быть координаты левого верхнего и правого верхнего угла
Catherina14 вне форума Ответить с цитированием
Старый 29.06.2011, 20:21   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Какая разница с какой координаты начинать?
Прямоугольник от этого кругом не станет.
Вот мое предложение:
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
struct koord{
	int x1;   int y1;	int x2;   int y2; float s;
   } zap[100],t;
FILE *Fzap;

int _tmain(int argc, _TCHAR* argv[])
{
	int n=0;
	Fzap=fopen("d:\\1\\koord.txt","wb");printf("Vvedi kol-vo pramoygolnikov \t");scanf("%d",&n);
	// Вводим
	for(int i=0;i<n;i++){
		zap[i].x1=rand();zap[i].y1=rand();
		zap[i].x2=rand();zap[i].y2=rand();
		zap[i].s=abs(zap[i].x1-zap[i].x2)*abs(zap[i].x1-zap[i].x2);
		printf("(%d;%d)\t(%d;%d) - %5.2f\n",zap[i].x1,zap[i].y1,zap[i].x2,zap[i].y1,zap[i].s);
		for(int j=0;j<i;j++){
			if(zap[i].s<zap[j].s){t=zap[i];zap[i]=zap[j];zap[j]=t;} 
		}
	}
	// Это вывод отсортированного for(int i=0;i<n;i++)		printf("(%d;%d)\t(%d;%d) - %5.2f\n",zap[i].x1,zap[i].y1,zap[i].x2,zap[i].y1,zap[i].s);
	fwrite(&zap,sizeof(zap),1,Fzap);
	fclose(Fzap);
	system("pause");
	return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.06.2011, 20:33   #8
Catherina14
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 12
По умолчанию

Ругается на эту строку
Код:
int _tmain(int argc, _TCHAR* argv[])
Catherina14 вне форума Ответить с цитированием
Старый 29.06.2011, 20:44   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это ВизуалСтудия.
пиши main как у тебя
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.06.2011, 20:48   #10
Catherina14
Пользователь
 
Регистрация: 27.06.2011
Сообщений: 12
По умолчанию

Спасибо большое!!!!
Catherina14 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна подсказка iilordii Помощь студентам 1 19.06.2011 21:23
Нужна ваша подсказка! :( m0dE^ БД в Delphi 1 17.02.2011 08:16
Программа на С про систему счисления. нужна подсказка Forward222 Помощь студентам 6 02.03.2009 20:38