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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проверьте прогу, не могу найти ошибки, сортировка, файлы 
V
    Опции темы
girlsbest
Дата 27.11.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



проверьте плиз прогу 
из файла не считывает массив...мне нужно чтобы считала все элементы и подсчитало их ...т.к количество элементов в массиве понадобится дальше для сортировки
Код

#include <cstring>
#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*b,int n)//запись данных в файл
{
    int i;
    FILE *out;
    if(!(out=fopen(name,"w")))
    {
        printf("ошибка открытия файла\n");
        return;
    }
    for(i=0;i<n;i++)
    {
        fprintf(out,"%d\n",b[i]);
            
    }
    fclose(out);
}
void add(int *a, int , 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)
{
   const int max_item=100;    
     int m=mas_size, i ,j ,k ;
     int a[max_item][max_item];
     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");
    int n, i,c,count=0;
    const int nmax=200;
    int mas[nmax]; 
    
    char*name=new char[1000];

    cout<<"выберите вариант для получения входных данных:\n 1) непосредственный  ввод\n 2) генерирование с помощью датчика случайных чисели запись в текстовый файл\n 3) ввод из текстового файла\n";
    cin>>c;
    switch (c)
    {
        case 1:cout<<"вводим колличество элементов массива\n";
               cin>>n;
                cout<<"введите элементы массива"<<endl; 
                for(i=1;i<=n;i++)
                    cin>>mas[i];
                sort(mas,n);
                cout<<"отсортированный массив"<<endl;
                for(i=1;i<=n;i++)
                cout<<mas[i]<<endl;
                break;
        case 2:cout<<"вводим колличество элементов массива\n";
            cin>>n;
            cout<<"введите имя файла\n";
            cin>>name;
            srand(time(0));
                for(i=1;i<=n;i++)
                    mas[i]=rand()%100;
                cout<<"элементы сгенерированного массива"<<endl;
                for(i=1;i<=n;i++)
                    cout<<mas[i]<<endl;
                sort(mas,n);
                cout<<"отсортированный массив"<<endl;
                for(i=0;i<n;i++)
                cout<<mas[i]<<endl;
                
                RecMas(name,mas,n);//запись массива в файл
                readfilestr(name);//чтение файла
                break;
        case 3:
            cout<<"введите имя файла\n";
            cin>>name;
            int i=0,count=0;
            FILE *in;
            if((in=fopen(name,"rt"))!=NULL)
            {
             while(fgets(mas,200,in))
             {
                count++;
             }
                fclose(in);
            }
            else
                printf("файл не открывается\n");

            sort(mas,count);
            cout<<"отсортированный массив"<<endl;
            for(i=0;i<count;i++)
                cout<<mas[i]<<endl;
            cout<<"введите имя файла в который записываем результат\n";
            cin>>name;
            RecMas(name,mas,count);//запись массива в файл
            readfilestr(name);//чтение файла
            break;
    }
    

 






Это сообщение отредактировал(а) girlsbest - 27.11.2008, 23:14
PM MAIL   Вверх
Dmi3ev
Дата 28.11.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



в 171 строке
Цитата

Код

fgets(mas,200,in)


а массив-то mas int, а функция вот такая:
Код

char *fgets(char *str, int num, FILE *stream);

Вообщем вы запихиваете массив int, там, где это невозможно))) должно быть char)))


--------------------

PM MAIL   Вверх
girlsbest
Дата 28.11.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну так я и не понимаю как мне итновский массив считать из файла... (((

Добавлено через 10 минут и 46 секунд
тогда можете написать код открытия файла, считывания массива из него...т.е пусто в файле записано
294
345
1
4
265
4
7
33
4
6

просто у меня не получается..я уже второй день бьюсь...((((
PM MAIL   Вверх
Dmi3ev
Дата 28.11.2008, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Код

//---------------------------------------------------------------------------
#include <iostream.h>
#include <fstream.h>

int main()
{
ofstream ofile;
ifstream ifile;

int mas1[5];
int mas2[5];
for (int i=0; i<5; i++)
 mas1[i]=i+1;
ofile.open("D:\\myfile.txt");
for (int i=0; i<5; i++)
 ofile<<mas1[i]<<' ';
ofile.close();
ifile.open("D:\\myfile.txt");
for (int i=0; i<5; i++)
 ifile>>mas2[i];
ifile.close();
for (int i=0; i<5; i++)
 cout<<mas2[i]<<' ';
        return 0;
}
//---------------------------------------------------------------------------

наглядней некуда, берем два массива, один заполняем цифрами от 1 до 5, второй пустой. Данные из первого массива записываем в файл D:\myfile.txt. Затем заполняем второй массив из файла. Выводим второй массив на экран. По-моему, теперь все должно быть ясно. Я старался  smile


--------------------

PM MAIL   Вверх
girlsbest
Дата 29.11.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



теперь со считыванием я проблему решила,только теперь массив который в файле не сортируется,а просто распечатывается
Код

#include <cstring>
#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*b,int n)//запись данных в файл
{
    int i;
    FILE *out;
    if(!(out=fopen(name,"w")))
    {
        printf("ошибка открытия файла\n");
        return;
    }
    for(i=0;i<n;i++)
    {
        fprintf(out,"%d\n",b[i]);
            
    }
    fclose(out);
}
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)
{
   const int max_item=100;    
     int m=mas_size, i ,j ,k ;
     int a[max_item][max_item];
     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;


}
int main()
{
setlocale(LC_ALL,".1251");
    int n=0, i,c;
    const int nm=200;
    int mas[nm];
    char*name=new char[1000];
cout<<"выберите вариант для получения входных данных:\n 1) непосредственный  ввод\n 2) генерирование с помощью датчика случайных чисели запись в текстовый файл\n 3) ввод из текстового файла\n";
    cin>>c;
    switch (c)
    {
        case 1:
    
    cout<<"вводим колличество элементов массива\n";
               cin>>n;
                cout<<"введите элементы массива"<<endl; 
                for(i=0;i<n;i++)
                    cin>>mas[i];
                sort(mas,n);
                cout<<"отсортированный массив"<<endl;
                for(i=0;i<n;i++)
                cout<<mas[i]<<endl;
                break;
        case 2:
            cout<<"вводим колличество элементов массива\n";
            cin>>n;
            
            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[0],n);
                cout<<"отсортированный массив"<<endl;
                for(i=0;i<n;i++)
                cout<<mas[i]<<endl;
                cout<<"введите имя файла\n";
            cin>>name;
                RecMas(name,mas,n);//запись массива в файл
                readfilestr(name);//чтение файла
                break;
        case 3:
            
    int k=0,n=0;        
    FILE * in;

          if(!(in=fopen("1.txt","r")))
          {
              printf("Данный файл не открывается\n");
              return 1;
          }
          else              
              printf("Файл открылся\n");

    fscanf (in, "%d", &mas[k]);
    while (!feof (in))
    {
k++;
    
fscanf (in, "%d", &mas[k]);
}
fclose (in);
n=k;
cout<<"исходный массив\n";
for(i=0;i<n;i++)
                cout<<mas[i]<<endl;
            sort(&mas[i],n);
            cout<<"отсортированный массив"<<endl;
            for(i=0;i<n;i++)
                cout<<mas[i]<<endl;
            cout<<"введите имя файла в который записываем результат\n";
            cin>>name;
            RecMas(name,mas,n);//запись массива в файл
            readfilestr(name);//чтение файла
            break;
    }
    

}

PM MAIL   Вверх
girlsbest
Дата 30.11.2008, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



для будующего поколения))) я ее сделала....smile  smile  smile  smile

Код

#include<iostream>
#include <time.h>
#include<stdio.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*b,int n)//запись данных в файл
{
    int i;
    FILE *out;
    if(!(out=fopen(name,"w")))
    {
        printf("ошибка открытия файла\n");
        return;
    }
    for(i=0;i<n;i++)
    {
        fprintf(out,"%d\n",b[i]);
            
    }
    fclose(out);
}
int max(int a[],int n)
{
    int max=a[0];
    for(int i=1;i<n;i++)
        if(a[i]>=max)
            max=a[i];
    return max;
}
int min(int a[],int n)
{
    int min=a[0];
    for(int i=0;i<n;i++)
        if(a[i]<=min)
            min=a[i];
    return min;
}
int kol_vstrech(int a[],int n,int x)
{
    int k=0;
    for(int i=0;i<n;i++)
        if(a[i]==x)
            k++;
    return k;
}
void sort_cherpak(int a[],int n)
{
    int x=min(a,n),y=max(a,n),k=x;
    int *b;
    for(int i=0;i<y-x+1;i++)
        b=new int [i];
    for(int i=0;i<y-x+1;i++)
    {
        b[i]=kol_vstrech(a,n,k);k++;
    }
    int i=0;
    for(int j=0;j<y-x+1;j++)
        while(b[j]!=0)
        {
            a[i]=j+x;i++;b[j]--;
        }

void main()
{
    setlocale (LC_ALL,".1251");
    const int nmax=100;
    srand(time(0));
    int n, i,c;
    int mas[nmax];
    char*name=new char[1000];
    cout<<"выберите вариант для получения входных данных:\n 1) непосредственный  ввод\n 2) генерирование с помощью датчика случайных чисели запись в текстовый файл\n 3) ввод из текстового файла\n";
    cin>>c;
    switch (c)
    {
        case 1:
     cout<<"вводим колличество элементов массива\n";
        cin>>n;
        cout<<"введите элементы массива"<<endl; 
        for(i=0;i<n;i++)
                    cin>>mas[i];
                sort_cherpak(mas,n);
                cout<<"отсортированный массив"<<endl;
                for(i=0;i<n;i++)
                cout<<mas[i]<<endl;
                break;
        case 2:
            cout<<"вводим колличество элементов массива\n";
            cin>>n;
            
            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_cherpak(mas,n);
                cout<<"отсортированный массив"<<endl;
                for(i=0;i<n;i++)
                cout<<mas[i]<<endl;
                cout<<"введите имя файла\n";
            cin>>name;
                RecMas(name,mas,n);//запись массива в файл
                readfilestr(name);//чтение файла
                break;
        case 3:
            int k=0;
            FILE * in;
            if(!(in=fopen("1.txt","r")))
            {
                printf("Данный файл не открывается\n");
                return ;
            }
            else              
                printf("Файл открылся\n");
                fscanf (in, "%d", &mas[k]);
                while (!feof (in))
                {
                    k++;
                    fscanf (in, "%d", &mas[k]);
                }
                fclose (in);
                cout<<"исходный массив\n";
                for(i=0;i<k;i++)
                    cout<<mas[i]<<endl;
                sort_cherpak(mas,k);
                cout<<"отсортированный массив"<<endl;
                for(i=0;i<k;i++)
                    cout<<mas[i]<<endl;
                cout<<"введите имя файла в который записываем результат\n";
                cin>>name;
                RecMas(name,mas,k);//запись массива в файл
                readfilestr(name);//чтение файла
                break;
    }
}
 


 

PM MAIL   Вверх
586
Дата 30.11.2008, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



У тебя везде вызывается new[] и нигде не вызывается delete[] - утечка памяти.
Да и зачем здесь память выделять, достаточно просто объявить массив:
Код
//...
void createfilestr(char*name)//создание текстового файла
{
    printf("выполняется создание файла\n");
    //char*str=new char [81];
    char str[81];
    FILE *out;
//...

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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