Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 01.02.2011, 15:57   #1
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
Восклицание Не могу понять в чем проблема.

Есть код программы, программа считывает данные из файла data.dat и заносит их в массив. В файле data.dat по заданию находятся длины сторон треугольников, нужно считать их из файла и найти периметры этих треугольников, далее нужно найти максимальный периметр и вывести его на экран. У меня массив состоит из 10-ти строк 3-х столбцов, то есть 10 треугольников, далее циклом находятся их периметры и заносятся в одномерный массив. После этого я нахожу максимальный массив "методом коробочки" и вывожу его на экран. Что удивительно но программа компилируется без ошибок и предупреждений, но результат выводится неверный. я думаю ошибка в считывании файла, так как если в файле data.dat отсутствуют какие либо данные программа все равно выводит неизвестно откуда взявшийся результат. Вот код программы:
Код:
#include<stdio.h>
#include<conio.h>
#include<iostream>
  int main()
    {
       int mass[10][3];
       int P[10];
       int PP;
          FILE*file_1=fopen("data.dat","r");
              for (int i=0;i<10;i++)
                for(int j=0;j<3;j++)
                     {
                        fseek(file_1,j,SEEK_SET);
                        fread(&mass[i][j],sizeof(int),1,file_1);
                        for (int g=0;g<10;g++)
                           {
                              P[g]=mass[i][0]+mass[i][1]+mass[i][2];
                              std::cout<<"P["<<g<<"]:"<<P[g]<<std::endl;
                              PP=P[0];
                              if (P[g]>PP)
                              PP=P[g];
                           }   
                     }
               std::cout<<"Pmax:"<<PP<<std::endl;
             {
                getch();
             }   
      return 0; 
    }
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Старый 01.02.2011, 17:07   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

я бы сделал так:
Код:
#include <iostream>
#include <fstream>
using namespace std;

class Triangle {
      private: 
              double a, b, c, _P;
      public:
              Triangle(){ a = b = c = _P = 0 ; }
              Triangle(double _a, double _b, double _c){
                     a = _a; b = _b; c = _c;
                     _P = a + b + c;
              }
              double P(){ return _P; }
};

int main(void){
    const int MAX_SIZE = 100;
    int i, j;
    double a,b,c, maxP, cP;
    Triangle triangles[MAX_SIZE];    
    
    ifstream input;
    input.open("data.dat");
    
    
    for(i=0; !input.eof(); i++){
            input >> a >> b >> c;
            triangles[i] = Triangle(a, b, c);
    }
    
    input.close();    
    
    maxP = triangles[0].P();
    
    for(j=0; j < i; j++){
             cP = triangles[i].P();    
             if(maxP < cP ) maxP = cP;
    }
    cout << "Max perimeter: "<<maxP<<"" << endl;    
    cin.get();
    return 0;
}
только почему-то 2 раза последнюю строку читает из файла... я не понял
NiCola999 вне форума Ответить с цитированием
Старый 01.02.2011, 18:54   #3
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
По умолчанию

Я как понял вы создали новый класс? Объявили переменные класса и сказали что они равны нулю. так? а вот что означает это:
Код:
  Triangle(double _a, double _b, double _c){
                     a = _a; b = _b; c = _c;
                     _P = a + b + c;
              }
              double P(){ return _P; }
} ;
я не понял.
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Старый 01.02.2011, 19:28   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
              Triangle(){ a = b = c = _P = 0 ; }              
              Triangle(double _a, double _b, double _c){
                     a = _a; b = _b; c = _c;
                     _P = a + b + c;
              }
              double P(){ return _P; }
2 конструктора
NiCola999 вне форума Ответить с цитированием
Старый 01.02.2011, 19:40   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

вообще говоря можно проще:
Код:
#include <iostream>
#include <fstream>
using namespace std;

int main(void){    
    double a,b,c, maxa, maxb, maxc, maxP = 0, P = 0;    
    ifstream input;
    input.open("data.dat");    
    input >> a >> b >> c;                    
    for(; !input.eof(); ){
            input >> a >> b >> c;            
            P = a + b + c;
            if(maxP < P) {
                    maxP = P;
                    maxa = a; maxb = b; maxc = c;
            }
    }        
    input.close();            
    cout << "Max perimeter: " << maxP << endl
         << "a = " << maxa << endl        
         << "b = " << maxb << endl
         << "c = " << maxc << endl;
    cin.get();
    return 0;
}

Последний раз редактировалось NiCola999; 01.02.2011 в 19:42.
NiCola999 вне форума Ответить с цитированием
Старый 01.02.2011, 19:56   #6
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
По умолчанию

Согласен, так проще, но не могли бы вы объяснит как пользоваться fstream'ом?
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Старый 01.02.2011, 20:03   #7
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

http://server.179.ru/tasks/cpp/files.html
NiCola999 вне форума Ответить с цитированием
Старый 01.02.2011, 20:16   #8
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
По умолчанию

спасибо за помощь
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять в чем проблема Lecter2009 БД в Delphi 7 09.09.2010 08:48
Не могу понять в чем проблема BaUruk Общие вопросы C/C++ 3 12.10.2009 10:43
НЕ могу понять в чем проблема! KNatalia Microsoft Office Excel 2 18.08.2009 02:03
Не могу понять в чем проблема!(copy,length,pos) zotox Помощь студентам 1 26.04.2009 03:12
Не могу понять в чем проблема (код) diznt Помощь студентам 2 03.08.2008 10:20