35 / 1 / 0
Регистрация: 22.04.2016
Сообщений: 42
1

Поиск блондина с максимальным ростом

27.02.2018, 21:46. Показов 365. Ответов 4
Метки нет (Все метки)

В структуре необходимо осуществить поиск. Вот примерный код, но видимо напортачила, поиск просто выводит последнего введённого студента. Что нужно изменить? Спасибо за любую помощь.

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
void fpoisk (student *pstud) {
    char s[] = "блондин"; 
    int r=0;
    bool f=true;
    for (int i=1; i<=n; i++)
        {
            if (pstud->rost>r)
            {
                r=pstud->rost;
            }
        }
 
    cout<<endl<<endl<<endl;
    for (int i=1; i<=n; i++)
    if (s==pstud->cvet && r==pstud->rost); 
    {
        cout<<" Фамилия:  "<<pstud->fam<<endl;
        cout<<" Рост:  "<<pstud->rost<<endl;
        cout<<" Вес:  "<<pstud->ves<<endl;
        cout<<" Цвет волос:  "<<pstud->cvet<<endl;
        f=false;
    }
    system("pause");
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2018, 21:46
Ответы с готовыми решениями:

Поиск разности между максимальным и минимальным значениями массива
Поросил друг,желательно на С++... Дан массив A из 10 значений. Найти разность между максимальным и...

Поиск максимального и минимального элемента в очереди, удаление элементов между максимальным и минимальным
Задача следующая: написать функцию, которая ищет максимальный и минимальный элементы в очереди и...

Найти мужчину с максимальным ростом и средний рост женщин
пишу программу. со структурой, Нужно найти мужчину с макс ростом и сред рост женщин. Проблемка в...

Выбор студента с максимальным ростом, сдавшего сессию без троек
Может кто нибудь помочь... выбор студента с максимальным ростом, сдавшего сессию без троек

4
1356 / 748 / 197
Регистрация: 10.02.2018
Сообщений: 3,097
27.02.2018, 22:08 2
Можете выложить весь код
0
35 / 1 / 0
Регистрация: 22.04.2016
Сообщений: 42
27.02.2018, 22:10  [ТС] 3
Серж762, да, конечно

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
154
155
156
157
158
159
160
#include <conio.h>
#include <iomanip>
#include <iostream>
#include <string>
 
using namespace std;
 
struct student {    
        string fam, cvet;
        float rost, ves;
    };
 
short fMenu ();
void fwriteinfile (char *file_name, student *pstud);
void fvvod (student *pstud);
void fpoisk(student *pstud);
void freadfromfile (char *file_name);
 
int n=1;
 
int main()
{
    short choise;
    int buf_size = 1, count=0;
    char *fName = "D:\\student.txt";
    student *stud = new student;
     do {
        cout<< "Studentov v spiske - "<< count << "/" << buf_size <<endl; 
        choise = fMenu();
        switch (choise) {
            case 1:
                system("cls");
                fwriteinfile(fName, stud);
                buf_size++;
                _getch();
                system("cls");
                break;
            case 2:
                system("cls");
                freadfromfile(fName);
                _getch();
                system("cls");
                break;
            case 3:
                system("cls");
                fpoisk(stud);
                _getch();
                system("cls");
                break;
            case 0:
                cout << "Do svidaniya!!!" << endl;
                system ("pause");
                break;
            default:
                cout << "Oshibka vvoda!!!" << endl;
                cout << "\n\nPress Enter..." << endl;
                _getch();
                system("cls");
                break;
        }
    } while(choise);
    cout << endl;
    return 0;
}
 
short fMenu () {
    short ch;
    cout << "|--------------------- MENU ----------------------------------------------|\n";
    cout << "|   [1]  Vvod                                                             |" << endl;
    cout << "|   [2]  Vivod                                                            |" << endl;
    cout << "|   [3]  Poisk                                                            |" << endl;
    cout << "|   [0]  Vihod                                                            |" << endl;
    cout << "|-------------------------------------------------------------------------|\n";
    cout << "Vash vibor: ";
    cin >> ch;
    return ch;
}
 
void fvvod (student *pstud) {
    for (int i=1; i<=n; i++)
    {   
    cin.ignore();
    cout <<"Vvedite informaciyu o studentah"<<endl; 
    cout << "Familiya: ";
    getline(cin, pstud->fam);
    cout << "Rost: ";
    cin >> pstud->rost;
    cout << "Ves: ";
    cin >> pstud->ves;
    cout << "Cvet volos: ";
    cin >> pstud->cvet;
    cout<<endl;
    }
}
 
void fwriteinfile (char *file_name, student *pstud) {
    fvvod(pstud);
    FILE *pfile = fopen(file_name,"ab");
    cout<<" ЦДДДТДДДДДДДДДДДДТДДДДДДТДДДДДТДДДДДДДДДДДДДДД·"<<endl; 
    cout<<" є N є  Familiya    є Rost є Ves є    Cvet volos  є"<<endl; 
    cout<<" ЗДДДЧДДДДДДДДДДДДЧДДДДДДЧДДДДДЧДДДДДДДДДДДДДДД¶"<<endl; 
 
    for (int i=1; i<=n; i++)
    {
     cout<<"      є  "<<i<<"  є"<<setw(10)<<pstud->fam<<"  є"<<setw(7)<<fixed<<setprecision(2)<< pstud->rost<<"  є"<<setw(7)<<pstud->ves;
     cout<<"  є"<<setw(15)<<pstud->cvet<<"   є"<<endl;
    }
    cout<<" УДДДРДДДДДДДДДДДДРДДДДДДДРДДДДДРДДДДДДДДДДДДДДДЅ"<<endl; 
    system("pause");
    fwrite(pstud, sizeof(student), 1, pfile);
    cout << "Dannie v fail zapisani";
    fclose(pfile);
}
 
void fpoisk (student *pstud) {
    char s[] = "blondin*"; 
    int r=0;
    bool f=true;
    for (int i=1; i<=n; i++)
        {
            if (pstud->rost>r)
            {
                r=pstud->rost;
            }
        }
 
    cout<<endl<<endl<<endl;
    for (int i=1; i<=n; i++)
    if (s==pstud->cvet && r==pstud->rost); 
    {
        cout<<" Familiya:  "<<pstud->fam<<endl;
        cout<<" Rost:  "<<pstud->rost<<endl;
        cout<<" Ves:  "<<pstud->ves<<endl;
        cout<<" Cvet volos:  "<<pstud->cvet<<endl;
        f=false;
    }
    system("pause");
}
 
void freadfromfile (char *file_name) {
    student *stud = new student; int i=1;
    FILE *pFile = fopen(file_name,"rb");
    cout << "Informatsiya o studentah: " << endl;
 
    while(!feof(pFile)){
        fread(stud, sizeof(student), 1, pFile);
        if (!feof(pFile)){
                cout <<i<< ": " << endl;
                cout << "Familiya: " << stud->fam << endl;
                cout << "Rost: " << stud->rost << endl;
                cout << "Ves: " << stud->ves << endl;
                cout << "Cvet volos: "<< stud->cvet<<endl;
                system ("pause");
                i++;
        }
     }
 
    fclose(pFile);
    delete stud;
}
0
93 / 91 / 62
Регистрация: 23.11.2013
Сообщений: 242
27.02.2018, 22:30 4
Цитата Сообщение от algoritmizaciya Посмотреть сообщение
поиск просто выводит последнего введённого студента
Потому что у вас в памяти существует только одно значение.
В 26 строке:
Цитата Сообщение от algoritmizaciya Посмотреть сообщение
C++
1
student *stud = new student;
Вы выделили памяти только под один объект, который в дальнейшем каждый раз перезаписывается в памяти при добавлении новых записей в файл, соответственно конечно же он имеет всегда только одно значение, которое было последнее при добавлении в файл.

Добавлено через 5 минут
Ну а по поводу кода из первого поста, когда вы исправите недочёты указанные выше, то вот подправленная функция поиска:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void fpoisk(student *pstud) {
    char s[] = "блондин";
    int r = 0;
    for (int i = 0; i < n; i++)
    {
        if (pstud[i].rost>r)
        {
            r = pstud[i].rost;
        }
    }
 
    cout << endl << endl << endl;
    for (int i = 0; i < n; i++)
        if (s == pstud[i].cvet && r == pstud[i].rost)
        {
            cout << " Фамилия:  " << pstud[i].fam << endl;
            cout << " Рост:  " << pstud[i].rost << endl;
            cout << " Вес:  " << pstud[i].ves << endl;
            cout << " Цвет волос:  " << pstud[i].cvet << endl;
        }
    system("pause");
}
Только у вас там есть мистическая глобальная переменная n, которая, как мне кажется, изначально предполагалась как размерность массива выделенной памяти, и в каждой функции добавления должна была наращиваться...
0
35 / 1 / 0
Регистрация: 22.04.2016
Сообщений: 42
27.02.2018, 23:20  [ТС] 5
Lambont, а как выделить память под все объекты структуры? Нужен цикл? Просто с таким я еще не сталкивалась.

Добавлено через 17 минут
Lambont, попыталась исправить, но видимо сделала что-то не то

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
#include <conio.h>
#include <iomanip>
#include <iostream>
#include <string>
 
using namespace std;
 
struct student {    
        string fam, cvet;
        float rost, ves;
    };
 
short fMenu ();
void fwriteinfile (char *file_name, student *pstud);
void fvvod (student *pstud);
void fpoisk(student *pstud);
void freadfromfile (char *file_name);
 
int n = 6;
 
int main()
{
    short choise;
    int count=0;
    char *fName = "D:\\student3.txt";
    student *stud = new student[n];
     do {
        cout<< "Studentov v spiske - "<< count << "/" << n <<endl; 
        choise = fMenu();
        switch (choise) {
            case 1:
                system("cls");
                fwriteinfile(fName, stud);
                count++;
                _getch();
                system("cls");
                break;
            case 2:
                system("cls");
                freadfromfile(fName);
                _getch();
                system("cls");
                break;
            case 3:
                system("cls");
                fpoisk(stud);
                _getch();
                system("cls");
                break;
            case 0:
                cout << "Do svidaniya!!!" << endl;
                system ("pause");
                break;
            default:
                cout << "Oshibka vvoda!!!" << endl;
                cout << "\n\nPress Enter..." << endl;
                _getch();
                system("cls");
                break;
        }
    } while(choise);
    cout << endl;
    return 0;
}
 
short fMenu () {
    short ch;
    cout << "|--------------------- MENU ----------------------------------------------|\n";
    cout << "|   [1]  Vvod                                                             |" << endl;
    cout << "|   [2]  Vivod                                                            |" << endl;
    cout << "|   [3]  Poisk                                                            |" << endl;
    cout << "|   [0]  Vihod                                                            |" << endl;
    cout << "|-------------------------------------------------------------------------|\n";
    cout << "Vash vibor: ";
    cin >> ch;
    return ch;
}
 
void fvvod (student *pstud) {
    cin.ignore();
    cout <<"Vvedite informaciyu o studentah"<<endl; 
    cout << "Familiya: ";
    getline(cin, pstud->fam);
    cout << "Rost: ";
    cin >> pstud->rost;
    cout << "Ves: ";
    cin >> pstud->ves;
    cout << "Cvet volos: ";
    cin >> pstud->cvet;
    cout<<endl;
}
 
void fwriteinfile (char *file_name, student *pstud) {
    fvvod(pstud);
    FILE *pfile = fopen(file_name,"ab");
    cout<<" ЦДДДТДДДДДДДДДДДДТДДДДДДТДДДДДТДДДДДДДДДДДДДДД·"<<endl; 
    cout<<" є N є  Familiya    є Rost є Ves є    Cvet volos  є"<<endl; 
    cout<<" ЗДДДЧДДДДДДДДДДДДЧДДДДДДЧДДДДДЧДДДДДДДДДДДДДДД¶"<<endl; 
    cout<<"      є  "  "  є"<<setw(10)<<pstud->fam<<"  є"<<setw(7)<<fixed<<setprecision(2)<< pstud->rost<<"  є"<<setw(7)<<pstud->ves;
    cout<<"  є"<<setw(15)<<pstud->cvet<<"   є"<<endl;
    cout<<" УДДДРДДДДДДДДДДДДРДДДДДДДРДДДДДРДДДДДДДДДДДДДДДЅ"<<endl; 
    system("pause");
    fwrite(pstud, sizeof(student), 1, pfile);
    cout << "Dannie v fail zapisani";
    fclose(pfile);
}
 
void fpoisk (student *pstud) {
    char s[] = "blondin*"; 
    int r=0;
    bool f=true;
    for (int i=1; i<=n; i++)
        {
            if (pstud->rost>r)
            {
                r=pstud->rost;
            }
        }
 
    cout<<endl<<endl<<endl;
    if (s==pstud->cvet && r==pstud->rost); 
    {
        cout<<" Familiya:  "<<pstud->fam<<endl;
        cout<<" Rost:  "<<pstud->rost<<endl;
        cout<<" Ves:  "<<pstud->ves<<endl;
        cout<<" Cvet volos:  "<<pstud->cvet<<endl;
        f=false;
    }
    system("pause");
}
 
void freadfromfile (char *file_name) {
    student *stud = new student[n]; int i=1;
    FILE *pFile = fopen(file_name,"rb");
    cout << "Informatsiya o studentah: " << endl;
 
    while(!feof(pFile)){
        fread(stud, sizeof(student), 1, pFile);
        if (!feof(pFile)){
                cout <<i<< ": " << endl;
                cout << "Familiya: " << stud->fam << endl;
                cout << "Rost: " << stud->rost << endl;
                cout << "Ves: " << stud->ves << endl;
                cout << "Cvet volos: "<< stud->cvet<<endl;
                system ("pause");
                i++;
        }
     }
 
    fclose(pFile);
    delete[] stud;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2018, 23:20
Помогаю со студенческими работами здесь

Поиск слов с максимальным количеством гласных
using System; using System.IO; class Program { static void Main(string args) { ...

Поиск слов с максимальным количеством гласных
using System; using System.IO; using System.Collections.Generic; class Program { static...

Поиск нескольких экземпляров с максимальным значением поля
Дан код задания с созданным классом: ПРОЦЕССОР: производитель (строка), модель (строка), тактовая...

Поиск числа с максимальным количеством нулей (конечный автомат)
Здравствуйте ребята. Вообщем суть такова: Создать программу, которая позволяет пользователю выбрать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru