girlsbest
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору люди проверьте прогу плиз...не могу понять в чем проблемма проверьте плиз прогу выводит билеберду какую-то...мне нужно отсортировать массив, но в первом случаи ввести вручную и просто вывести, во вотором сгенерировать случайными числами и записать в файл...у меня генерирует значки, смайлики, сердечки, тоже самое сортирует, но в фай записывает вполне нормальные числа.... в третьем случаи нужно из файла считать массив и его отсортировать..там тоже, что-то не то ..выводит на кран одно число, а потом пустые строчки и M....в файл записывает тоже одно или два числа..а где были пустые строчки пишет 0...а где М----отриццательное число -52 если я не ошибаюсь... #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,char*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(char *a, int , int item) { int i; for(i=0;a[i];i++); a[i]=item; } void small_sort(char *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(char *mas, int mas_size) { const int max_item=100; int m=mas_size, i ,j ,k ; char 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(char *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; char 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; } |