1

Тема: Помилка в коді

Завдання. У будь-якому текстовому редакторі створити текстовий файл, в який внести інформацію згідно з варіантом. Скласти програму, яка буде виконувати обробку інформації з файла згідно з варіантом. Додаткові параметри вводить користувач.
Знайти середнє арифметичне від’ємних елементів, результат обчислень дописати в той самий файл.

#include <iostream> 
#include <fstream> 
#include <stdio.h> 
#include <conio.h> 
#include <math.h> 
using namespace std;
int main(int argc, char* argv[])
{
    int x, sa , res,sum;
        char a;
    unsigned int i;
    ifstream f2("chisla.txt");
    for(i=0;i<4;i++) 
        f2>>x;
    sum=0;
    sum=sum+x;
    res=x;
    f2>>x;
    while (! f2.eof()) 
        { 
  i++; 
  if (i<0) 
  {
     sum=sum+x;a++;
  }
   { 
     sa=sum/i; 
     res=x; 
   } 
 f2>>x; 
  } 
 f2.close(); 
 ofstream f1("chisla.txt",ios::app); 
 f1<<"\n **  REZULTAT  **\nIskomoe chislo: "<<res; 
 f1.close(); 
 cout<<"resultat dopisano v tot ge fajl \n"; 
system("pause");
}

В файлі chisla.txt лежать цілі числа
-5
-4
-6
Якщо хтось може допоможіть.

2 Востаннє редагувалося koala (11.12.2013 20:27:45)

Re: Помилка в коді

unsigned int не може бути меншим за 0 за визначенням. Вам треба не i з нулем порівнювати, а x.
І взагалі я щось погано розумію, що ви робите на початку - нащо 4 рази читаєте з файлу перед тим, як обробляти прочитане? В програмі є шматки, які роблять те, що вам треба, але розташовані не так, як треба, і ще купа різного невідомо нащо.

Подякували: Адріян Ігорович, dkii2

3

Re: Помилка в коді

Можете допомогти, покажіть як це має виглядати, на словах я вас не зовсім зрозумів.

4 Востаннє редагувалося Logans (11.12.2013 23:27:11)

Re: Помилка в коді

Звісно з файлами я не на ти і навіть не на ви, але судячи з вашого коду мені важко було щось зрозуміти (голова загружена, та і код вигляд має не дуже привабливий), але зчитування можливо можна проводити більш красиво.

Наприклад:

    ifstream fileUse("file.txt"); // Відкривання файлу для зчитування 
    /*
    ifstream fileUse;             // Наскільки я знаю, можливо також
    fileUse.open("file.txt");     // відкривати файл, ось такою конструкцією
    */
    while (!fileUse.eof())        // Доки не кінець файлу, виконувати наступні умови
    {
        getline(fileUse, Text);   // Зчитування лінії в якій міститься ваше значення
        cout << Text;             // Вивід на екран користувачу зчитані дані
    };
    fileUse.close();              // Закрити файл

Якщо у вас кожне значення записане у новий рядок, то можна використати:

getline()

Але якщо у вас значення йдуть один за одним, то:

fileUse >> Text

getline() я використовував для зчитування та виведення тексту, з файлу на екран.

Text, змінна типу string.


Далі перевести значення зі string в int (або в дійсний тип, в залежності які значення в вас будуть використовуватись).

Приклад переведення в int:

IntegerValue = atoi(Text.c_str());

IntegerValue, змінна типу int.


Краще записувати переведене значення в масив, який має тип ваших чисел, а потім шукати результат, використовуючи елементи цього масиву.

Щодо запису в файл, можна використати ось такий варіант:

fileUse << Result

Можливо в мене можуть бути неточності, але саме за допомогою ось таких конструкцій, я нещодавно робив свої лабораторні роботи, хоча я переважно працював з тектами, а не числами.
Доречі ось гарно розписана стаття по роботі з файлами (але вона на російській мові).

Успіху у написанні :)
P.S. Бажано, щоб ви, самостійсно пошукали яким ще чином працювати з файлами в середовищі С++.

"Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program."
- Linus Torvalds
Подякували: dkii1

5

Re: Помилка в коді

Давайте так. Вам треба у функції main:
1. Прочитати з файлу числа;
2. Знайти середнє арифметичне від'ємних чисел;
3. Записати в файл це середнє.
4. Все це гарненько оформити (повідомлення, паузи і т.д.)
Ви можете показати у вашій програмі, які саме рядки що саме роблять? Почну за вас, п.1 у вас виконують рядки:
12-14, 18, 19, 30, 32. Як на мене, 13 і 14 тут взагалі зайві, а 18, 19 і 30 можна записати одним рядком:

while(f2 >> x)

але, можливо, я просто не зрозумів вашої логіки. Ви не могли б прояснити, нащо тут рядки 13 і 14?
Поясніть, де у вас що по інших пунктах - скажу, що зайве (якщо ще самі не розберетеся).

Подякували: dkii1

6

Re: Помилка в коді

Всім дякую, думаю далі сам розберуся.

Подякували: koala1