С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

работа с файлом и массивами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как работать с STL stack http://www.cyberforum.ru/cpp-beginners/thread253350.html
дайте плис ссылки на книжки по STL,а именно интересует stack!
C++ Список Подскажите пожалуйста, как сделать связанный список? Чтобы новый элемент добавлялся в очередь по принципу LIFO. Или хотябы натолкните на мысль. Вот есть по принципу FIFO: // список #include... http://www.cyberforum.ru/cpp-beginners/thread253335.html
Какую графическую библиотеку выбрать? C++
Господа ветераны, поделитесь опытом какую графическую библиотеку лучше выбрать для программирования 2D игр (OpenGL, DirectX, другое...)? А главное какой программой вы пользуетесь для создания...
Работа со строками C++
ммм, в общем задание такое: Функция int isAlfa (char s) получает символ и определяет, является ли он символом латиницы или кириллицы(строчным или прописным) Функция char* strAlfa(char* str, int&...
C++ Код Грея http://www.cyberforum.ru/cpp-beginners/thread253313.html
Помогите написать программу Написать программу преобразования прямого двоичного числа в код Грея и программу обратного преобразования (предварительно написав функцию представления десятичного...
C++ Ошибка С2446 Помогите решить проблему над ошибкой С2446.Код: //нажатие клавиши в поле Сумма private: System::Void textBox1_KeyPress(System::Object^ sender, ... подробнее

Показать сообщение отдельно
genka
0 / 0 / 0
Регистрация: 24.09.2010
Сообщений: 7

работа с файлом и массивами - C++

07.03.2011, 15:53. Просмотров 430. Ответов 0
Метки (Все метки)

Помогите пожалуйста с решением токого задания, я тут вобще запутался

Программа должна предоставлять возможность нескольким пользователям работать с числовыми данными. Сведения о пользователях должны храниться в отдельном текстовом файле пользователей: для каждого пользователя указывается имя пользователя и пароль (пароль в файле должен храниться задом наперед). Числовые данные всех пользователей хранятся в одном файле данных.
1. При запуске программы необходимо запросить имя пользователя и его пароль (при вводе пароля на экране отображать символы «*» вместо реально вводимых символов).
2. Если имя пользователя найдено в файле пользователей и введенный пароль верен, то загружаются пользовательские числовые данные. В противном случае должно выдаваться сообщение об ошибке и завершение программы.
3. Программа должна предоставлять пользователю следующие возможности по работе с числовыми данными:
1. Вывод элементов массива X
2. Добавление нового элемента в конец массива X
3. Удаление элемента из массива X
4. Расчет заданной функции F(X) над элементами массива X и вывод значения функции пользователю.
5. Расчет элементов массива Y по формуле Yi=G(Xi) и вывод их пользователю в виде
y[1] = 3.543
y[2] = 6.422
y[3] = -14.223
…………
При выводе округлять значения Yi до 3-х знаков после запятой.
F: Сумма квадратов; G: F= система -10x-5,x<15; (x-10)/6, 15<=x<50; 7/8x,x>50

это подобная программа:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
void PasswordTest(int *n){
char File[]="I:/1.txt", UserName[20], Password[10], P1[20], P2[100];
FILE *fl;
int p=0, p1=0, p2=0,x, i=-1;
if ((fl=fopen(File,"r+"))==NULL)//открытие файла для чтения
{
printf("Ошибка 0: невозможно открыть файл\n");
getch();
exit(1);
}
printf("Введите имя пользователя:\t");//ввод данных
gets(UserName);
printf("Введите пароль(8 символов):\t");
for(int i=0;i<8;i++)//считывание пароля
{
Password[i]=getch();
printf("*");
if(i==7)
Password[8]='\0';
}
strrev(Password);//обращение пароля
while(!feof(fl))//проверка именя пользователя и пароля
{
if(p==0)
*n=*n+1;
p1=0;
p2=0;
fgets(P2,100,fl);
fgets(P1,20,fl);
fgets(P2,10,fl);
for(int i=0;i<8;i++)//проверка пароля
if(Password[i]==P2[i])
p2++;
if(strlen(UserName)==(strlen(P1)-1))//имени пользователя
for(int i=0;i<strlen(P1);i++)
if(UserName[i]==P1[i])
p1++;
if((p1==strlen(UserName))&&(p2==8))
p=1;//если пароль и имя соответственно совпадают
}
if(p==0)//если не совпадают
{
printf("\nОшибка 1: Пароль или имя пользователя введены неправильно");
getch();
exit(1);
}
fclose(fl);//закрытие файла
}
void PoluchenieMassiva(int n, int **x, int *kol)
{
int k=0, p=0, *X, j=0;
char File[]="I:/1.txt", E[100]="", num[10]="";
FILE *fl;
if((fl=fopen(File,"r+"))==NULL)
{
printf("Ошибка 2: невозможно открыть память\n");
getch();
exit(1);
}
while(k!=n)//перенос курсора на нужного пользователя
{
k++;
if(k!=n)
for(int i=0;i<3;i++)
fgets(E,100,fl);
}
fgets(E,100,fl);//считывание строки с массивом
for(int i=0;i<strlen(E);i++)//подсчет количества элементов массива
if(E[i]==' ')
p++;
*kol=p;
X = (int (*)) malloc(p*sizeof(int));//выделение памяти под массив
if(!X)
{
printf("Ошибка 4: Требуемая память не выделена.\n");
getch();
exit(1);
}
p=0;
for(int i=0;i<strlen(E);i++)//разбиение строки на элементы массива
{
if(E[i]!=' ')
{
num[j]=E[i];
j++;
}
else
{
X[p]=atoi(num);
j=0;
for(int q=0;q<strlen(num);q++)
num[q]=' ';
p++;
}
}
*x=X;
}
void VyvodX(int **x, int kol)
{
for(int i=0;i<kol;i++)//вывод массива
printf("\nX[%d] = %d",i,*(*x+i));
}
void Dobavlenie(int **x,int kol,int n)
{
double u, xp=0;
int max_length=0,kol_strok=0;
char File[]="I:/1.txt", S[100]="", chislo[50], Str[100]="", **Mas_file_strings;
FILE *fl;
if((fl=fopen(File,"r+"))==NULL)
{
printf("\nОшибка 9: Ошибка при открытии файла");
getch();
exit(1);
}
while(!feof(fl))
{
fgets(S,100,fl);
kol_strok++;//подсчет количества строк в файле
if(strlen(S)>max_length)//подсчет максимальной длины строки в файле
max_length=strlen(S);
}
fclose(fl);
Mas_file_strings=(char **)malloc(kol_strok*sizeof(char));//выделение памяти одномерный массив, по количеству строк
if(!Mas_file_strings)
{
printf("Ошибка 6: Требуемая память не выделена.\n");
getch();
exit(1);
}
for(int i=0;i<kol_strok;i++)
{
Mas_file_strings[i]=(char *)malloc((max_length+11)*sizeof(char));//выделение памяти под двумерный массив, по колисеству элементов в строки + 10 элементов (для добавления)
if(!Mas_file_strings)
{
printf("Ошибка 7: Требуемая память не выделена.\n");
getch();
exit(1);
}
}
if((fl=fopen(File,"r+"))==NULL)
{
printf("\nОшибка 8: Ошибка при открытии файла");
getch();
exit(1);
}
for(int i=0;i<kol_strok;i++)
{
fgets(S,(max_length+10),fl);
for(int j=0;j<(max_length+10);j++)
Mas_file_strings[i][j]=S[j];//запись файла в массив
}
printf("\nВведите число, которое хотите добавить в конец массива:");
scanf("%lf",&xp);//ввод нового элемента
for(int i=1;i<n;i++)//считывание до нужной строки, курсор переносится на нужную строку
for(int j=0;j<3;j++)
fgets(S,100,fl);
for(int i=0;i<kol;i++)//формирование строки с массивом
{
u=(double)*(*x+i);
gcvt(u,15,chislo);
strcat(Str,chislo);
Str[strlen(Str)-1]=' ';
}
gcvt(xp,15,chislo);
strcat(Str,chislo);//добавление элемента
Str[strlen(Str)-1]=' ';
strcat(Str,"\n");//окончательный вариант строки Str
n--;
rewind(fl);
for(int i=0;i<=strlen(Str);i++)
Mas_file_strings[(n*3)][i]=Str[i];
for(int i=0;i<kol_strok;i++)
fprintf(fl,"%s", Mas_file_strings[i]);
printf("\nОперация произведена успешно!\n");
fclose(fl);
}
void Udalenie(int **x,int kol,int n)
{
double u;
int max_length=0,kol_strok=0, xp=0;
char File[]="I:/1.txt", S[100]="", chislo[50], Str[100]="", **Mas_file_strings;
FILE *fl;
if((fl=fopen(File,"r+"))==NULL)
{
printf("\nОшибка 9: Ошибка при открытии файла");
getch();
exit(1);
}
while(!feof(fl))
{
fgets(S,100,fl);
kol_strok++;//подсчет количества строк в файле
if(strlen(S)>max_length)//подсчет максимальной длины строки в файле
max_length=strlen(S);
}
fclose(fl);
printf("\n%d\t%d\n",kol_strok,max_length);
Mas_file_strings=(char **)malloc(kol_strok*sizeof(char));//выделение памяти одномерный массив, по количеству строк
if(!Mas_file_strings)
{
printf("Ошибка 6: Требуемая память не выделена.\n");
getch();
exit(1);
}
for(int i=0;i<kol_strok;i++)
{
Mas_file_strings[i]=(char *)malloc((max_length+11)*sizeof(char));//выделение памяти под двумерный массив, по колисеству элементов в строки + 10 элементов (для добавления)
if(!Mas_file_strings)
{
printf("Ошибка 7: Требуемая память не выделена.\n");
getch();
exit(1);
}
}
if((fl=fopen(File,"r+"))==NULL)
{
printf("\nОшибка 8: Ошибка при открытии файла");
getch();
exit(1);
}
for(int i=0;i<kol_strok;i++)
{
fgets(S,(max_length+10),fl);
for(int j=0;j<(max_length+10);j++)
Mas_file_strings[i][j]=S[j];//запись файла в массив
}
printf("\nВведите элемент, который хотите удалить из массива:");
scanf("%d",&xp);//ввод номера удаляемого элемента
for(int i=1;i<n;i++)//считывание до нужной строки, курсор переносится на нужную строку
for(int j=0;j<3;j++)
fgets(S,100,fl);
for(int i=0;i<kol;i++)//формирование строки с массивом
{
if(i!=(xp-1))
{
u=(double)*(*x+i);
gcvt(u,15,chislo);
strcat(Str,chislo);
Str[strlen(Str)-1]=' ';
}
}
Str[strlen(Str)-1]=' ';
strcat(Str,"\n");//окончательный вариант строки Str
n--;
rewind(fl);
for(int i=0;i<=strlen(Str);i++)
Mas_file_strings[(n*3)][i]=Str[i];
for(int i=0;i<kol_strok;i++)
fprintf(fl,"%s", Mas_file_strings[i]);
printf("\nОперация произведена успешно!\n");
fclose(fl);
}
void RaschetFunction(int **x, int kol)
{
int summa=0;
for(int i=0;i<kol;i++)
summa=summa+(*(*x+i));
printf("Сумма элементов массива= %d",summa);
}
void RaschetY(int **x, int kol)
{
float *F;
F=(float *)malloc(kol*sizeof(int));
for(int i=0;i<kol;i++)
{
if(*(*x+i)<0)
{
F[i]=(float)5*(*(*x+i))*(*(*x+i))+3;
}
else if((*(*x+i)>=0)&&(*(*x+i))<=20)
{
if(*(*x+i)!=1)
F[i]=(float)(*(*x+i)-5)/(*(*x+i)-1);
else
{
printf("\nОшибка вычисление, х не может быть равен 1\n");
F[i]=NULL;
}
}
else if(*(*x+i)>20)
{
F[i]=(float)*(*x+i)/6;
}
}
for(int i=0;i<kol;i++)
printf("F[%d]= %.3f\n",i,F[i]);
}
void main()
{
int k, n=0, *x, kol, kol_strok=0, max_length, *L;
setlocale(LC_ALL,"Russian");
PasswordTest(&n);//проверка на наличие в файле имени пользователя и пароля
re: printf("\n\nЧто вы хотите делать\n1:Вывод элементов массива Х\n2:Добавление нового элемента в конец массива Х\n3:Удаление элемента из массива Х\n4:Рассчет заданной функции над элементами массива Х и вывод значений\n5:Рассчет элементов массива Y по формуле Y=G(X) и вывод их пользователю\n");
scanf("%d",&k);
switch(k)//выбор действия
{
case 1:
PoluchenieMassiva(n, &x, &kol);//считывание массива из файла
VyvodX(&x, kol);//вывод массива
break;
case 2:
PoluchenieMassiva(n, &x, &kol);//считывание массива из файла
Dobavlenie(&x, kol, n);//добавление элемента
break;
case 3:
PoluchenieMassiva(n, &x, &kol);//считывание массива из файла
Udalenie(&x, kol, n);//удаление жлемента
break;
case 4:
PoluchenieMassiva(n, &x, &kol);//считывание массива из файла
RaschetFunction(&x,kol);//расчет функции
break;
case 5:
PoluchenieMassiva(n, &x, &kol);//считывание массива из файла
RaschetY(&x, kol);//расчет по системе
break;
default:
exit(1);//выход
}
goto re;//возврат к выбору действия
getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.