Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 53, средняя оценка - 4.68
girlsbest
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 14
#1

файлы в с++ - C++

22.11.2008, 19:48. Просмотров 6343. Ответов 0
Метки нет (Все метки)

помогите плиз найти ошибки у меня задача на сортировку методом вычерпывания...вот это чистая сортировка
Код
#include <iostream>
#include <cstring>
using namespace std;
void add(double *a, int n, double item)
{
	int i;
    for(i=0;a[i];i++);
        a[i]=item;
}

void small_sort(double *a, int n)
{
	int i,j;
    double temp;
    for(i=1;i<n;i++)
        for(j=0;j<n-i;j++)
        if(a[j]>a[j+1])
        {
          temp=a[j];
          a[j]=a[j+1];
          a[j+1]=temp;
        }
}

void sort(double *mas, int mas_size, double max_item)
{
     max_item=(int)max_item+1;
     int m=mas_size, i ,j ,k ;
     double **a=new double *[max_item];
     for(i=0;i<max_item;i++)
         a[i]=new double [m];
      for(i=0;i<max_item;i++)
          for(j=0;j<m;j++)
              a[i][j]=0;
	  for(i=0;i<mas_size;i++)
		  add(a[(int)mas[i]], m, mas[i]);
	  for(i=0;i<max_item;i++)
		  small_sort(a[i],mas_size);
	      i=0;
		  for(j=0;j<max_item;j++)
		  {
			  k=0;
			  while(k!=m)
			  {
				  if(!a[j][k])
				  {
					  k++;
					  continue;
				  }
				  mas[i]=a[j][k];
				  i++;
				  k++;
			  }
		  }
}

double max_item(double *a, int n)
{
	double max=a[0];
	for(int i=1;i<n;i++)
		if(a[i]>max)
			max=a[i];
	return max;
}
void main()
{
	setlocale (LC_ALL,".1251");
    int n, i;
    double *mas; 
	cout<<"вводим колличество элементов массива\n";
	cin>>n;
	mas=new double [n];
	cout<<"вводим элементы массива\n";
	for(i=0;i<n;i++)
		cin>>mas[i];
	cout<<"массив имеет вид\n";
	for(i=0;i<n;i++)
	{
		cout<<mas[i]<<' ';
	    cout<<endl;
	}
	double max=max_item(mas,n);
	sort(mas,n,max);
	cout<<"результат сортировки\n";
	for(i=0;i<n;i++)
	{
		cout<<mas[i]<<' ';
	    cout<<endl;
	}
	delete [] mas;
}
потом мне нужно в одной программе сделать так....
Для получения входных данных иметь три варианта:
a) непосредственный ввод;
b) генерирование с помощью датчика случайных чисел и запись в текстовый файл;
c) ввод из текстового файла.
и все это в одной проге..ну тоесть чтобы спрашивало каким способом нужно делать...потом вводился номер способа и все это выполнялось...у меня вот такое получилось
Код
#include<iostream>
#include<cmath>
#include<stdio.h>
#include<time.h>
using namespace std;
void createfilestr(char*name)//создание текстового файла
{
	printf("выполняется создание файла\n");
	char*str=new char [81];
	FILE *out;
	if(!(out=fopen(name,"w")))
	{
		printf("ошибка открытия файла\n");
		return;
	}
	printf("введите данные\n");
	printf("введите Ctrl+Z для окончания\n");
	
	scanf("%s",str);
	while(!feof(stdin))
	{
		fprintf(out,"%s\n",str);
		
		scanf("%s",str);
	}
	fclose(out);
}
void readfilestr(char*name)//чтение текстового файла
{
	printf("выполняется чтение файла\n");
	char*str=new char [81];	
	FILE *in;
	if(!(in=fopen(name,"rt")))
	{
		printf("ошибка открытия файла\n");
		return;
	}
	fscanf(in,"%s",str);	
	while(!feof(in))
	{
		printf("%s\n",str);
		fscanf(in,"%s",str);
	}
	fclose(in);
}
void RecMas(char*name,int*a,int n)//запись данных в файл
{
	int i;
	FILE *out;
	if(!(out=fopen(name,"w")))
	{
		printf("ошибка открытия файла\n");
		return;
	}
	for(i=0;i<n;i++)
	{
		fprintf(out,"%d\n",a[i]);
			
	}
	fclose(out);
}
void FvMa(char*name,int*a,int n)//запись данных из файла в массив
{
	int i=0;
	
	FILE *in;
	if(!(in=fopen(name,"rt")))
	{
		printf("ошибка открытия файла\n");
		return;
	}
	
	for(i=0;i<n;i++)
		if(!feof(in))
			fscanf(in,"%d",&a[i]);
		else
		{
			printf("ошибка чтения\n");
			return;
		}

	
	fclose(in);
}
void add(int *a, int n, int item)
{int i;
for(i=0;a[i];i++);
a[i]=item;
}

void small_sort(int *a, int n)
{int i,j;
int temp;
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}

void sort(int *mas, int mas_size, int max_item)
{
max_item=(int)max_item+1;

int m=mas_size, i ,j ,k ;
int **a=new int *[max_item];
for(i=0;i<max_item;i++)
    a[i]=new int [m];

for(i=0;i<max_item;i++)
for(j=0;j<m;j++)
a[i][j]=0;

for(i=0;i<mas_size;i++)
add(a[(int)mas[i]], m, mas[i]);

for(i=0;i<max_item;i++)
small_sort(a[i],mas_size);

i=0;
for(j=0;j<max_item;j++)
{k=0;
while(k!=m)
{
if(!a[j][k])
{
k++;
continue;
}
mas[i]=a[j][k];
i++;
k++;
}
}
}

int max_item(int *a, int n)
{
int max=a[0];
for(int i=1;i<n;i++)
if(a[i]>max)
max=a[i];
return max;


}
void main()
{
setlocale(LC_ALL,".1251");
char*name=new char[100];
int n, i,c;
int *mas;
cout<<"введите размерность массива"<<endl;
cin>>n;
mas=new int [n];
int max=max_item(mas,n);
cout<<"выберите вариант для получения входных данных:\n 1) непосредственный  ввод\n 2) генерирование с помощью датчика случайных чисели запись в текстовый файл\n 3) ввод из текстового файла\n";
	cin>>c;
if(c>1)
	{
		
			cout<<"введите имя файла\n";
			cin>>name;
	}
	switch (c)
	{
case 1:cout<<"введите элементы массива"<<endl; 
for(i=0;i<n;i++)
cin>>mas[i];

for(i=0;i<n;i++)
cout<<mas[i]<<' ';
cout<<endl;
sort(mas,n,max);
cout<<"отсортированный массив"<<endl;
for(i=0;i<n;i++)
cout<<mas[i]<<' ';
cout<<endl;


break;
		case 2:srand(time(0));

				for(i=0;i<n;i++)
					mas[i]=rand()%100;
				cout<<"элементы сгенерированного массива"<<endl;
				for(i=0;i<n;i++)
					cout<<mas[i]<<endl;
				sort(mas,n,max);
				cout<<"отсортированный массив"<<endl;
				for(i=0;i<n;i++)
				cout<<mas[i]<<endl;
				
				RecMas(name,&mas[0],n);//запись массива в файл
				readfilestr(name);//чтение файла
break;
		case 3:
			FvMa(name,&mas[0],n);//запись из файла в массив
			sort(mas,n,max);
			cout<<"отсортированный массив"<<endl;
			for(i=0;i<n;i++)
			cout<<mas[i]<<endl;
			RecMas(name,&mas[0],n);//запись массива в файл
			readfilestr(name);//чтение файла
break;
	
}
}
это дело компилируется с 10 предупреждениями, а потом выполняется только до запросов и генерации массива...плиз помогите найти ошибки
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2008, 19:48     файлы в с++
Посмотрите здесь:

Файлы С++ C++
C++ Файлы
C++ файлы
C++ файлы
C++ нужно переделать код (из Файлы текстовые (FILE*) в Файлы текстовые (потоки))
Файлы.Текстовые файлы C++
Заголовочные файлы и файлы cpp C++
C++ Зачем нужно добавлять файлы в файлы исходного кода
Файлы C++
C++ Заголовочные файлы .h, файлы исходного когда c/c++ и установление связи между ними
Работа в Visual Studio 2015 - как добавить файлы исходного кода и заголовочные файлы? C++
Раздельная компиляция: что помещать в заголовочные файлы, а что в файлы реализации (исходники)? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 00:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru