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

Сформировать двоичный файл из элементов, заданной структуры "Абитуриент" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Игрок А объявляет двузначное число от 01 до 99. Игрок В меняет местами его цифры и прибавляет полученное число http://www.cyberforum.ru/cpp-beginners/thread1184530.html
Игрок А объявляет двузначное число от 01 до 99. Игрок В меняет местами его цифры и прибавляет полученное число к сумме его цифр. Полученный результат он объявляет игроку А. Игрок А проделывает с этим числом ту же процедуру, и так они продолжают поступать поочередно, объявляя числа. От суммы чисел берется остаток от деления на 100, поэтому объявляются лишь двузначные числа. Какие числа может...
C++ Перевод кода с Pascal на С++ uses crt; function Summ(n:longint):byte; var m:longint; s:byte; begin s:=0; m:=n; while m>0 do begin s:=s+m mod 10; http://www.cyberforum.ru/cpp-beginners/thread1184528.html
Составьте программу вычисления суммы чисел C++
Составьте программу вычисления суммы чисел кратных 15 в диапазоне от 15 до 615.
C++ Найти в массиве среднее арифметическое простых элементов
кому не сложно, помогите!!! Задачи надо переписывать!
C++ Принадлежит ли точка с координатами (х, у) заданной области http://www.cyberforum.ru/cpp-beginners/thread1184490.html
Для данных областей составить линейную программу, которая печатает true, если точка с координатами (х, у) принадлежит закрашенной области, и false — в противном случае (обратите внимание, что внутренняя окружность - эллипс, а внешняя - круг): график.
C++ Вычисление значения по формуле Помогите пожалуйста!!!! Перепечатывайте задание на форум в виде текста. подробнее

Показать сообщение отдельно
AntipkA
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 8
22.05.2014, 11:37     Сформировать двоичный файл из элементов, заданной структуры "Абитуриент"
Проблема с функцией дополнения данными
само условие : Сформировать двоичный файл из элементов, заданной в варианте структуры, распечатать его содержимое, выполнить удаление и добавление элементов в соответствии со своим вариантом, используя для поиска удаляемых или добавляе-мых элементов функцию. Формирование, печать, добавление и удаление элементов оформить в виде функций. Преду-смотреть сообщения об ошибках при открытии файла и вы-полнении операций ввода/вывода.
3. Варианты
1. Структура "Абитуриент":
- фамилия, имя, отчество;
- год рождения;
- оценки вступительных экзаменов (3);
- средний балл аттестата.

Добавлено через 5 минут
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
153
#include <iostream>
#include <stdio.h>
#include <conio.h>
using namespace std;
 
struct abiturient
{
    char fio [35];
    int b_year;
    char ocenki;
    int sr_bal ;
};
 
FILE *pf;
abiturient a, Arr[20];
 
void form(int);
void del(int);
void add(int, int);
void output(int);
 
int main()
{
    setlocale (2, "");
    printf("\t\tБлоковый ввод-вывод");
    int k, m=0, q=-1, u=1;
    char temp[35];
    //формирование записей в файле
    printf("\n\nВведите количество абитуриентов, о которых вы хотите внести сведения (<20): ");
    scanf("%d", &k);
    form(k);
    //выведем сформированные данные
    output(k);
    // удалить элемент, номер вводится с клавиатуры.
    printf("\выберите элемент, который требуется удалить.\n");
    
    del(k);
    k-- ; 
    output(k);
 
    //добавляем элемент после указанной фамилии
    printf("Укажите фамилию, после которой нужно внести новые сведения: ");
    scanf("%d", &temp);          //temp-введенная фамилия
    for (int i=0; i<k; i++)
        if (temp==Arr[i].fio){ q=i+1; break;}
    add(k, q);
    k++;
    output(k);      
    //запишем в файл новые данные
    if ((pf=fopen("f.dat", "w+b"))==NULL) exit(0);
    for (int i=0; i<k; i++)
    {
        fwrite(&Arr[i], sizeof(abiturient ), 1, pf);
        if (ferror(pf)) exit(0);
    }
    fclose(pf);
    _getch();
    return 0;
}
 
void form(int k)
{
    //открытие файла
    if ((pf=fopen("f.dat", "wb"))==NULL)
    { 
        perror("\nошибка при открытии файла");
        exit(0);
    }
    //формирование записей в файле
    printf("\nВведите сведения о %d абитуриентах:\n", k);
    for (int i=0; i<k; i++)
    {
        printf("Введите ФИО: ");
        scanf("%s", &a.fio);
        printf("Введите год рождения: ");
        scanf("%d", &a.b_year );
        printf("Введите Оценку за экзамен: ");
        scanf("%d", &a.ocenki );
        printf("Введите средний бал аттестата: ");
        scanf("%d", &a.sr_bal );
        printf("\n");
        fwrite(&a, sizeof(abiturient), 1, pf);
        if (ferror(pf)) exit(0); //при возникновении ошибки возвращается значение отличное от 0
    }
    fclose(pf);
    //считывание информации с файла
    if ((pf=fopen("f.dat", "rb"))==NULL) exit(0);
    int j=0;
    while(!feof(pf) && j<k)
    {
        fread(&Arr[j], sizeof(abiturient), 1, pf);
        j++;
    }
    fclose(pf);
    return;
}
 
void output(int k)
{
    printf("\nДанные о абитуриентах\n");
    for (int i=0; i<k; i++)
    {
        printf("ФИО: %s", Arr[i].fio);
        printf("\n");
        printf("Год рождения: %d", Arr[i].b_year );
        printf("\n");
        printf("Оценка за экзамен: %d", Arr[i].ocenki) ;
        printf("\n");
        printf("Средний бал аттестата: %d", Arr[i].sr_bal );
        printf("\n");
    }
    return;
}
// изменить на удаление указаного номера
void del(int k)
{ 
    int u;
//  cout << "Введите номер удаляемого элемента";
    cin >>u;
    for (int i=u; i<k; i++)
    {
        strcpy(Arr[i].fio, Arr[i+1].fio);
        Arr[i].b_year=Arr[i+1].b_year;
        Arr[i].ocenki=Arr[i+1].ocenki;
        Arr[i].sr_bal =Arr[i+1].sr_bal ;
    }
    return;
}
//добавить с указаной фамилией  нужно меня, ставить цикл на проверку существующего и если нахожу фамилию то делейт
void add(int k, int q)
{
    if (q==-1) printf("\nТакой фамилии в списке нет");  
    else
    {
        for (int i=k; i>q; i--)
        {
            strcpy(Arr[i].fio, Arr[i-1].fio);
            Arr[i].b_year =Arr[i-1].b_year ;
            Arr[i].ocenki =Arr[i-1].ocenki ;
            Arr[i].sr_bal =Arr[i-1].sr_bal ;
        }
        printf("Введите фио: ");
        scanf("%s", &Arr[q].fio);
        printf("Введите год рождения: ");
        scanf("%d", &Arr[q].b_year );
        printf("Введите Оценку: ");
        scanf("%d", &Arr[q].ocenki );
        printf("Введите средний бал аттестата: ");
        scanf("%d", &Arr[q].sr_bal );
        printf("\n");
    }
    return;
}
Добавлено через 6 минут
когда в программе дохожу до момента ввода фамилии, после которой нужно выполнить ф-цию дополнения : add, если ввожу фамилию которая существует, все равно
C++
1
if (q==-1) printf("\nТакой фамилии в списке нет");
выдает , что такой фамилии нет, хотя должно идти по ветве else и дополнять массив.

З.Ы. извиняюсь мог не очень корректно объяснить.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru