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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
#1

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

08.10.2011, 14:44. Просмотров 444. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2011, 14:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос не могу разобраться с процедурой ввода и вывода программа рабочая подскажите плиз (C++):

Программа на С++ ввода/вывода - C++
Не могу понять где у меня ошибка в программе #include &lt;iostream.h&gt; int main (){ int i; cout &lt;&lt;&quot;Vvedite chislo&quot; ; cin...

Не могу разобраться с чтением файла и последующего вывода в консоль - C++
У меня задание. Из файла Hello.txt вывести текст (конкретно &quot;Hello world!&quot;). Поиск по форуму привел меня к такому коду: #define...

Программа ввода вывода массивов - C++
Программа ввода\вывода массивов. Вводишь 10 элементов массива, далее программа выводит в столбец эти элементы. Строка 17.цикл while...

Не могу разобраться, как работает программа - C++
Препод сегодня рассказывал но я очень спать хотел и не понял помогите как это роботает #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

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

Не могу разобраться как работает данная программа - C++
Помогите пожалуйста разобраться как работает данная программа ниже дано задание и готовый листинг. Я запутался тут с этими указателями. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
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);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
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);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
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 и подчеркивает ретурн нулевой
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
08.10.2011, 15:52 #8
Значит просто return; или int main() сделайте.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2011, 15:52
Привет! Вот еще темы с ответами:

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

Программа для ввода и вывода фамилий и оценок студентов. Отберите тех, у которых сумма баллов вторая по вел - C++
Программа для ввода и вывода фамилий и оценок студентов. Отберите тех, у которых сумма баллов вторая по величине #include&lt;stdio.h&gt; ...

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё. - C++
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для...

Переделать код с процедурами ввода и вывода и с процедурой параметра - Turbo Pascal
Нужно переделать с процедурами ввода и вывода и с процедурой параметра. program lab2_1; uses Crt; const n_max=10; var ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.10.2011, 15:52
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru