Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите отладить программу  (Прочитано 7883 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
v.korleone
Помогающий

ua
Offline Offline

« : 21-11-2008 07:40 » 

Есть программа которая должна открывать текстовый файл с ведомостью группы и выводить средний бал по предмету для всех студентов.

Код:
#include<iostream.h>//библиотека для ввода, вывода
#include<fstream.h>//библиотека для работы с файлами
#include<string.h>//библиотека для строковых данных
#include<stdlib.h>//библиотека для выхода из программы
#include<conio.h>//библиотека для задержки на экране
#include<stdio.h>
#include<iomanip.h>//библиотека для выравнивания столбцов в таблице данных
const int l=31;//наибольшее возможное количество символов в строке
struct fio
{ //структура fio включает данные студентов:
char fam[l];//фамилии
char im[l];//имена
char ot[l];//отчества
};
struct student
{ //структура student включает данные студентов:
fio f; //ФИО
char gr[l];//группу
int col; //количество баллов
};
struct gruppa
{ //структура gruppa данные групп:
char gr[l]; //название группы
int ng; //количество студентов
};
ifstream in;
ofstream out;
void inputstfile(student s[],int &m);//ввод из файла
void outputst(student s[],int m); //вывод на экран массива студентов
void outputstfile(student s[],int m);//сохранение в файле массива студентов
float srbal(student s[], int m);//средний балл по предмету
//Podprogramma 1//
void inputstfile(student s[],int &m)//ввод из файла
{
m=0;
in>>s[m].f.fam>>s[m].f.im>>s[m].f.ot>>s[m].gr>>s[m].col;
while (in.good())//пока не прекратятся записи в файле
{
m++;
in>>s[m].f.fam>>s[m].f.im>>s[m].f.ot>>s[m].gr>>s[m].col;//ввод из файла ФИО, групп, количества баллов
}
}
//Podprogramma 2//
void outputst(student s[],int m)//вывод на экран массива студентов
{ int i;
for(i=0;i<m;i++)
{
cout<<setw(14)<<setiosflags(ios::left)<<s[i].f.fam
<<setw(11)<<setiosflags(ios::left)<<s[i].f.im
<<setw(15)<<setiosflags(ios::left)<<s[i].f.ot
<<setw(6)<<setiosflags(ios::left)<<s[i].gr
<<setw(10)<<setiosflags(ios::left)<<s[i].col<<endl;
if((i+1)%10==0) getch();//задержка на экране
}
getch();
}
//Podprogramma 3//
void outputstfile (student s[], int m)//сохранение в файле массива студентов
{int i;
out<<"familiya "<<"imya "<<"otchestvo "<<"gruppa "<<"Kolichestvo ballov"<<endl;
for(i=0;i<m;i++)
out<<setw(14)<<setiosflags(ios::left)<<s[i].f.fam//запись в файл фамилий,
<<setw(11)<<setiosflags(ios::left)<<s[i].f.im//имен,
<<setw(15)<<setiosflags(ios::left)<<s[i].f.ot//отчеств
<<setw(6)<<setiosflags(ios::left)<<s[i].gr//названия группы
<<setw(10)<<setiosflags(ios::left)<<s[i].col<<endl;//количества баллов
}
//***Подпрограмма для нахождения среднего балла по предмету*****
float srbal(student s[], int m)
{
int i,sum;
float w;
student t;
sum=0;
for(i=0;i<20;i++)
sum=s[i].col+sum;
w=sum/20;
}
//***Glavnaya programma***
const int N=100;
int main()
{
student a[N];
gruppa b[N];
int n,i,j,k,fl,max;
char file[l];
float w;
cout<<endl<<"imya faila:";
cin>>file;
in.open(file);
if (in==NULL)
{//если не указан путь к файлу, то вывести сообщение "файл не найден"
cout<<"fail ne naiden";
getch;
exit(1);
}
inputstfile(a,n);
in.close();
outputst(a,n);
max=a[0].col;
k=0;
for(i=1;i<n;i++)
if (a[i].col>max) max=a[i].col;
for(i=0;i<n;i++)
if (a[i].col==max)
{fl=1;
for(j=0;j<k;j++)
if(strcmp(a[i].gr,b[j].gr)==0)
{fl=0;
b[j].ng++;
}
if (fl==1)
{strcpy(b[k].gr,a[i].gr);
b[k].ng=1;
k++;
}
}
cout<<" \n";
**************************MY********************** *********
cout<<" \n";
cout<<"Sredniy bal po predmetu:\n"<<" \n";
srbal(w);
/*outputst(a,n);
out.open("resultst.txt");
if(out==NULL) {
cout<<"File ne sozdan";
getch();
exit(1);
}
outputstfile(a,n);
out.close();*/
}
Помогите, пожалуйста, разобраться с функциями и структурами которые здесь применяются и отладить программу. Программа не работает и компилятор выводит ошибку:
"Line 162 error: cannot convert `float' to `student*' for argument `1' to `float srbal(student*, int)' "
« Последнее редактирование: 21-11-2008 08:39 от Вад » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 21-11-2008 07:44 » new

v.korleone, оформи свой пост тегами [code][/code]
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 21-11-2008 08:30 » 

v.korleone, почему обманываешь - программа не компилится, а не "не работает" Ага

например, тут косяк
   cout<<setw(14)<<setiosflags(ios::left)<<s.f.fam

s.f - s это указатель же

ещё много не компилится всего. Исправляй
Записан

RuNTiME
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 21-11-2008 10:05 » 

Поправил ошибки компиляции и привел код к не абфусцированному виду Улыбаюсь
Прогу не отлаживал, предоставляю это полезное занятие тебе v.korleone Улыбаюсь

Код:
#include <iostream>//библиотека для ввода, вывода
#include <fstream>//библиотека для работы с файлами
#include <string.h>//библиотека для строковых данных
#include <stdlib.h>//библиотека для выхода из программы
#include <conio.h>//библиотека для задержки на экране
#include <stdio.h>
#include <iomanip>//библиотека для выравнивания столбцов в таблице данных

using namespace std;

const int l = 31;//наибольшее возможное количество символов в строке

struct fio
{ //структура fio включает данные студентов:
    char fam[l];//фамилии
    char im[l];//имена
    char ot[l];//отчества
};

struct student
{ //структура student включает данные студентов:
    fio f; //ФИО
    char gr[l];//группу
    int col; //количество баллов
};

struct gruppa
{ //структура gruppa данные групп:
    char gr[l]; //название группы
    int ng; //количество студентов
};

void inputstfile(student s[],int &m);//ввод из файла
void outputst(student s[],int m); //вывод на экран массива студентов
void outputstfile(student s[],int m);//сохранение в файле массива студентов
float srbal(student s[]);//средний балл по предмету

ifstream in;
ofstream out;

//Podprogramma 1//
void inputstfile(student s[], int &m)//ввод из файла
{
    m = 0;
    in >> s[m].f.fam >> s[m].f.im >> s[m].f.ot >> s[m].gr >> s[m].col;
    while (in.good())//пока не прекратятся записи в файле
    {
        m++;
        in >> s[m].f.fam >> s[m].f.im >> s[m].f.ot >> s[m].gr >> s[m].col;//ввод из файла ФИО, групп, количества баллов
    }
}

//Podprogramma 2//
void outputst(student s[], int m)//вывод на экран массива студентов
{
    int i;
    for(i = 0; i < m; i++)
    {
        cout << setw(14) << setiosflags(ios::left) << s->f.fam
        << setw(11) << setiosflags(ios::left) << s->f.im
        << setw(15) << setiosflags(ios::left) << s->f.ot
        << setw(6) << setiosflags(ios::left) << s->gr
        << setw(10) << setiosflags(ios::left) << s->col << endl;
        if((i+1)%10==0) getch();//задержка на экране
    }
    getch();
}

//Podprogramma 3//
void outputstfile (student s[], int m)//сохранение в файле массива студентов
{
    int i;
    out << "familiya " << "imya " << "otchestvo " << "gruppa " << "Kolichestvo ballov" << endl;
    for(i = 0; i < m; i++)
        out << setw(14) << setiosflags(ios::left) << s->f.fam//запись в файл фамилий,
        << setw(11) << setiosflags(ios::left) << s->f.im//имен,
        << setw(15) << setiosflags(ios::left) << s->f.ot//отчеств
        << setw(6) << setiosflags(ios::left) << s->gr//названия группы
        << setw(10) << setiosflags(ios::left) << s->col<<endl;//количества баллов
}

//***Подпрограмма для нахождения среднего балла по предмету*****
float srbal(student s[])
{
    int i,sum;
    student t;
    sum = 0;
    for(i = 0; i < 20; i++)
        sum = s->col+sum;
    return (float)sum / 20;
}

//***Glavnaya programma***
const int N = 100;
int main()
{
    student a[N];
    gruppa b[N];
    int n,i,j,k,fl,max;
    char file[l];
    cout << endl << "imya faila:";
    cin >> file;
    in.open(file);
    if(in == NULL)
    {//если не указан путь к файлу, то вывести сообщение "файл не найден"
        cout << "fail ne naiden";
        getch();
        exit(1);
    }
    inputstfile(a, n);
    in.close();
    outputst(a, n);
    max = a[0].col;
    k = 0;
    for(i = 1; i < n; i++)
        if (a->col>max) max = a->col;
    for(i = 0; i < n; i++) {
        if (a->col == max) {
            fl=1;
            for(j = 0; j < k; j++) {
                if(strcmp(a->gr, b[j].gr) == 0) {
                    fl=0;
                    b[j].ng++;
                }
            }
            if (fl == 1) {
                strcpy(b[k].gr, a->gr);
                b[k].ng = 1;
                k++;
            }
        }
    }
    cout << " \n \n";
//**************************MY********************** *********
    cout << "Sredniy bal po predmetu:\n" << " \n";
    //srbal(w);
/*
    outputst(a, n);
    out.open("resultst.txt");
    if(out == NULL) {
        cout << "File ne sozdan";
        getch();
        exit(1);
    }
    outputstfile(a, n);
    out.close();
*/
}
Записан

Любимая игрушка - debugger ...
v.korleone
Помогающий

ua
Offline Offline

« Ответ #4 : 23-11-2008 18:10 » 

RuNTiME, спасибо, за подсказку про "return (float)sum / 20", но строчки типа "s->f.fam" с вот такими стрелочками "->" - это лишнее (без них тоже все работает Улыбаюсь )
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 23-11-2008 18:18 » 

v.korleone, эти стрелочки - это очень важная деталь Улыбаюсь)
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines