IAG0582 - Programmeerimine II (Aleksandr Bobõrev)
#6
Отправлено 08 февраля 2011 - 12:52
В текстовом файле Hinad.txt на первой строчке N - колличество студентов в файле.
На следующей строчке - матрикул студента и количество сданных предметов M
Далее, на M строчках - Количествое EAP за предмет и оценка по нему.
Такая структура повторяется для всех оставшихся N-1 студентов...
Программа должна вывести в текствый файл Out.txt N строчек, содержащих матрикул студента и его средневзвешенный бал с точностью до 3х знаков после запятой.
Пример
Hinad.txt
3
101234IASB 3
3 5
3 5
6 4
104321IAEB 5
2 1
4 4
3 4
6 4
2 5
101234IABB 2
3 1
5 3
Out.txt
101234IASB KKH: 4.500
104321IAEB KKH: 4.000
101234IABB KKH: 2.250
Дополнительный бал получат те, кто сделает корректный подсчет KKH и в случае, если в файле на месте оценки за предмет стоит 0 или "MI", напоминаю, что эти предметы не идут в расчет KKH.
#10
Отправлено 09 февраля 2011 - 21:53
Верно, 3.765
Пожалуйста, принесите на занятие свою последние домашнее задание, что вы делали по Programmeerimine I
Я посмотрю, одобрю, и на основание его получите задание в качестве ДЗ1 (то самое, которое дает 10 балов).
Если по каким либо причинам у вас его не было, или я посчитаю его некорректным, я дам свое ДЗ1.
#12
Отправлено 10 февраля 2011 - 03:39
ссыль
Я там как вольный правда домашки стараюсь делать
Вот код с первого занятия, объясняет то, чем занимались. дополнил комментами
#include <stdio.h> #include <string> int main(){ FILE *fmarks, *textout; //обозначаем файлы textout = fopen("textout.txt", "w");//открываем и присваеваем каждой "файловой переменной\указателю" свой файл // fopen("filename", "parametr");// имя файла и параметр otkritija, обязателен, если хотим работать с файлом. // параметры: "w" - write. esli netu файла - budet sozdan. est' - perepisan s nulja, "a" - append, т.е. +novaja infa v konec faila. "r" - просто чтение fmarks = fopen("marks.txt", "r"); //читай выше //у нас в задании в папке с программой был файл marks.txt, в котором было 4 строки, на каждой было 2 числа, разделенных пробелом (от 1 до 9). первое - кол-во еап за предмет, второе - оценка за него. нужно посчитать средний балл int EAP, Mark, i, Eproizv, Eeap; //инт и в африке инт float sredball; // для подсчета среднего балла sredball = 0;//обнуляем средний балл Eeap = 0;//... сумма ЕАП Eproizv = 0;// потом перемножаем все оценки на ЕАП for (i=0; i<4; i++) { // изначальное значение, условие, что делаем после прохода fscanf(fmarks, "%i %i", &EAP, &Mark); //считываем 2 числа из строки (первой строки, затем со след. циклом из второй и т.д.). Eeap += EAP; //прибавляем к переменной "куча АП" тольлько что считанное ЕАП со строчки, чтобы в конце цикла получить сумму всех ЕАП printf("EAP:%i Mark:%i \n",EAP, Mark); // пишем что считали Eproizv += Mark*EAP; //с каждым проходом цикла прибавляем произведение считанного ЕАП на оценку, на выходе получаем штуку нужную для формулы } sredball = (float)Eproizv/Eeap; // считаем средний балл по формуле, флоат стоит перед выражением показывая, что нужно именно дробное выражение, иначе отдаст целочисленное, т.к. и епроизв и Ееап через инт заданы printf("Average mark: %4.2f", sredball);//показываем что получили %4.2ф значит будет 4 знака, 2 после запятой. fprintf(textout, "Srednij ball:%4.2f",sredball);//записываем в файл текстаут fclose(textout);//закрываем лавочку fclose(fmarks);//закрываем лавочку return 0;//закрываем все, бугага }
Сообщение изменено: Ruzard (10 февраля 2011 - 03:43 )
#13
Отправлено 10 февраля 2011 - 04:43
эта прога будет падать постоянно, если хотяб одно условие будет не выполнено.. например нет 1го файла, или данные в фйле не числовые..
ну и
float sredball; // для подсчета среднего балла
sredball = 0;//обнуляем средний балл
должно выглядить минимум так: float sredball = 0.0;
#14
Отправлено 10 февраля 2011 - 07:58
Но несколько if (...) return 100500; не помешало бы поставить
Сообщение изменено: Infern0 (10 февраля 2011 - 08:11 )
#16
Отправлено 10 февраля 2011 - 15:57
#18
Отправлено 11 февраля 2011 - 03:33
Вообще так: float sredball = 0.0f; В декларации переменной это конечно не важно, но вот в самом коде это необходимо.должно выглядить минимум так: float sredball = 0.0;
Иначе:
#include <stdio.h> int main (void) { float f = 0.1f; if (f == 0.1) printf("Equal\n"); else printf("Not equal\n"); if (f == 0.1f) printf("Equal\n"); else printf("Not equal\n"); }
Поэтому лучше использовать double.
#27
Отправлено 25 февраля 2011 - 07:58
"В строчке "PARE uueks esimeheks valiti TTÜ ärikorralduse instituudi külalisprofessor Milvi Tepp" ответ будет 5, по одному в словах uueks,ärikorraldus,instituudi, külalisprofessor, Tepp"
замени на
"В строчке "PARE uueks esimeheks valiti TTÜ ärikorralduse instituudi külalisprofessor Milvi Tepp" ответ будет 6, по одному в словах uueks, TTü, ärikorraldus, instituudi, külalisprofessor, Tepp"
#29
Отправлено 25 февраля 2011 - 16:18