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

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

Восстановить пароль Регистрация
 
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
08.10.2011, 14:44     не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз #1
Разработать схему алгоритма и программу, используя функции с параметрами для ввода массива и его обработки.
В массиве хранятся данные об осадках за месяц. Найти
• Количество дней с осадками больше среднего
вот по этому заданию написали такой код мне, вот сам пытался его полностью понять но кое какие моменты не могу понять посмотрите плиз кто в языке лучше понимает и подскажите, я комменты писал в листинге так как понимаю что выполняет , если не правильно подскажите как на самом деле работает та или иная строка в листинге, вопросы только по основной программе и функции ввода, функцию вывода и ниже которая функция в самом низу пока не затрагиваю мне бы сначала те понять...
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2011, 14:44     не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз
Посмотрите здесь:

Программа на С++ ввода/вывода C++
программа ввода слова и вывода его в обратном порядке C++
Не могу разобраться как работает данная программа C++
C++ Не работает программа. не могу разобраться что в ней не так
C++ Не могу разобраться с чтением файла и последующего вывода в консоль
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
08.10.2011, 14:53     не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз #2
Цитата Сообщение от lexflax Посмотреть сообщение
while (true); // ВОТ ТУТ НЕ МОГУ ПОНЯТЬ Почему пишут труе? и как вообще он действует и может //применятся в цикле????
Это простейший пример бесконечного цикла. Потому что условие в скобках всегда ненулевое.
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
08.10.2011, 14:54  [ТС]     не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз #3
тобишь из программы нельзя будет выйти?? она вновь и вновь будет повторяться?
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
08.10.2011, 14:57     не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз #4
Цитата Сообщение от lexflax Посмотреть сообщение
double* Deposits = new double[day]; // вот тут точно не понимаю выделяется память для депозит, //и тип ее массив дробный?
Создание динамического массива Deposits с элементами типа double размером day

Добавлено через 51 секунду
Цитата Сообщение от lexflax Посмотреть сообщение
тобишь из программы нельзя будет выйти?? она вновь и вновь будет повторяться?
Можно добавить условие в меню, если выбрать 4 например, то выход.

Добавлено через 54 секунды
Цитата Сообщение от lexflax Посмотреть сообщение
if ((f = fopen(fname, "w+")) == NULL) // создание текстового файла и если в нем имеются запись //то стереть и записать новую вот только не пойму почему проверяют равен ли он нулю??
fopen возвращает NULL при ошибке открытия

Добавлено через 32 секунды
Цитата Сообщение от lexflax Посмотреть сообщение
delete []Deposits; // вот это что за строчка что она выполняет и зачем это нужно?
Освобождение памяти, занятой динамическим массивом
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
08.10.2011, 15:17  [ТС]     не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз #5
Цитата Сообщение от mimicria Посмотреть сообщение

Можно добавить условие в меню, если выбрать 4 например, то выход.

А как добавить можите показать пому что я сам думал об этом но не догадался как это реализовать



Добавлено через 32 секунды

Освобождение памяти, занятой динамическим массивом
А если ее не освободить к чему это приведет???
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
08.10.2011, 15:36     не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз #6
К утечке памяти

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
switch (menu) //пункт выбора меню при выборе вызов функции
{
case 1: pInput(day, filename); break;
case 2: pOutput(filename); break;
case 4: return 0;
default: cout << endl << " Ошибка при выборе пункта меню!";
}
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
08.10.2011, 15:39  [ТС]     не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз #7
так ошибку выдает такую [C++ Error] moeeeeeee.cpp(44): E2467 'main()' cannot return a value и подчеркивает ретурн нулевой
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2011, 15:52     не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз
Еще ссылки по теме:

Программа для ввода и вывода фамилий и оценок студентов. Отберите тех, у которых сумма баллов вторая по вел C++
Не могу разобраться, как работает программа C++
Рабочая программа не идет C++

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

Или воспользуйтесь поиском по форуму:
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
08.10.2011, 15:52     не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз #8
Значит просто return; или int main() сделайте.
Yandex
Объявления
08.10.2011, 15:52     не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз
Ответ Создать тему
Опции темы

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