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

не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Извлечение корня, длинная арифметика http://www.cyberforum.ru/cpp-beginners/thread363033.html
По заданному натуральному числу А требуется найти наибольшее число В такое, что B^2 <= A. вот набросал, но прога работает медленно. как ее можно оптимизировать или подскажите более быстрый способ....
C++ Найти "средний" по величине делитель числа Надо найти "средний" по величине делитель числа х.Использовать прибавление 1 = + - х :-целочисленное деление и %-остаток от деления. 3.3 Запрещено создавать темы с бессмысленными названиями вроде... http://www.cyberforum.ru/cpp-beginners/thread363028.html
странная последовательность C++
Во входном файле записана последовательность чисел в странном формате: у каждого числа сначала записано количество цифр в этом числе, а потом через пробел - сами цифры. Последовательность...
Линейные Односвязные Списки С++ C++
Разработать и реализовать программу создания и обработки линейного односвязного списка с одним информационным полем, которое содержит целое число. Программа должна содержать меню с перечнем...
C++ написать программу вычисляющие ИМЛ с помощью узлов Чебышева http://www.cyberforum.ru/cpp-beginners/thread363017.html
помоги кто чем может а...cout<<"Help me"<<endl;
C++ Задача с вычислениями по формулам Помогите пожалуйста написать программу для расчёта по двум формулам, результат первой должен совпадать со второй. формулы: {Z}_{1} =... подробнее

Показать сообщение отдельно
lexflax
11 / 11 / 1
Регистрация: 03.04.2011
Сообщений: 627

не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз - C++

08.10.2011, 14:44. Просмотров 482. Ответов 7
Метки (Все метки)

Разработать схему алгоритма и программу, используя функции с параметрами для ввода массива и его обработки.
В массиве хранятся данные об осадках за месяц. Найти
• Количество дней с осадками больше среднего
вот по этому заданию написали такой код мне, вот сам пытался его полностью понять но кое какие моменты не могу понять посмотрите плиз кто в языке лучше понимает и подскажите, я комменты писал в листинге так как понимаю что выполняет , если не правильно подскажите как на самом деле работает та или иная строка в листинге, вопросы только по основной программе и функции ввода, функцию вывода и ниже которая функция в самом низу пока не затрагиваю мне бы сначала те понять...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <iostream>
#include <conio.h>
#include <locale>
 
using namespace std;
 
void pInput(int day, char* frame);//это так понимаю прототип функции
void pOutput(char* fname);//прототип
int NumberOfLines(char* fl);// прототип
 
void main()
{
system("color 7B");// цвет фона 
 
do // цикл с пост условием
{
int menu, day;
char filename[] = {"save.txt"};// считывает данные с файла в переменную 
 
cout << endl << "\t\t\t Glavnoe menu programmi" << endl;
cout << endl << " Dla vvoda dannih nagmite 1 :";
cout << endl << " Dla vibora resultatov nagmite 2:" << endl;
cout << endl << "\n Vah vibor: ";
cin >> menu;
 
if (menu == 1)
{
cout << endl << " Vvedite kolichestvo dney v mesace: ";
cin >> day;//количество дней
}
 
switch (menu) //пункт выбора меню при выборе вызов функции
{
case 1: pInput(day, filename); break;
case 2: pOutput(filename); break;
default: cout << endl << " Ошибка при выборе пункта меню!";
}
 
_getch();//задержка экрана
system("cls");// очищение экрана
}
while (true); // ВОТ ТУТ НЕ МОГУ ПОНЯТЬ Почему пишут труе? и как вообще он действует и может 
//применятся в цикле????
}
 
void pInput(int day, char* fname) // процедура ввода с формальными параметрами
{
system("cls");
 
double* Deposits = new double[day]; // вот тут точно не понимаю выделяется память для депозит, 
//и тип ее массив дробный?
FILE *f;
 
for (int n = 0; n < day; n++)
{
cout << endl << " Vvedite dannie za " << n + 1 << "-e hislo: ";
cin >> Deposits[n];// ввод по очереди данные осадков за каждый день
}
 
if ((f = fopen(fname, "w+")) == NULL) // создание текстового файла и если в нем имеются запись
//то стереть и записать новую вот только не пойму почему проверяют равен ли он нулю??
cout << endl << " Nevozmogno zapisat fail!";
else
{
for (int n = 0; n < day; n++)
{
fprintf(f, "%f \n", Deposits[n]);// вот тут что происходит в этой строке не пойму.... вероятно запись
//данных в файла точнее всех дней 
}
}
 
cout << endl << " Dannie uspehno zapisani v fail.";
 
fclose(f);
delete []Deposits; // вот это что за строчка что она выполняет и зачем это нужно?
}
 
void pOutput(char* fname)
{
system("cls");
 
int day = 0, n;
double quantity = 0, summa = 0, middle = 0;
FILE *p;
char* fl = fname;
 
day = NumberOfLines(fl);
 
if (day == -1) return;
 
p = fopen(fname, "r");
 
if (p == NULL) cout << endl << " Невозможно открыть файл!";
else
{
double* Deposits = new double[day];
 
for (n = 0; n < day; n++)
fscanf(p, "%f ", &Deposits[n]);
 
for (n = 0; n < day; n++)
{
if (Deposits[n] == 0) continue;
else
{
quantity++;
summa += Deposits[n];
}
}
 
middle = summa / quantity;
quantity = 0; summa = 0;
 
for (n = 0; n < day; n++)
{
if (Deposits[n] <= middle) continue;
else quantity++;
}
 
for (n = 0; n < day; n++)
{
if (n % 6 == 0) cout << endl;
cout << "\t" << Deposits[n];
}
 
cout << endl << " Srednee znahenie osadkov v dogdlivie dni ravno: " << middle;
cout << endl << " Kolichestvo dnei privihauhih srednee znachenie osadkov: " << quantity;
 
delete []Deposits;
}
 
fclose(p);
}
 
int NumberOfLines (char* fl)
{
int counter = 0;
FILE *ptr;
char temp[100];
 
ptr = fopen(fl, "r");
if (ptr == NULL)
{
cout << endl << " Невозможно открыть файл!";
return -1;
}
 
while (fgets(temp, 100, ptr) != NULL) counter++;
 
fclose(ptr);
return counter;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.