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

Структура: Выполните сортировку данных по номеру билета - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Синтаксическая ошибка http://www.cyberforum.ru/cpp-beginners/thread793072.html
#include "stdafx.h" #include <conio.h> #include <stdio.h> #define eof -1 #define maxline 1000 int getline(char s ,int lim); int main() { char s; int y;
C++ Не могу разобраться с отчётом профайлера Всем доброго времени суток. Решал я простенькую задачку и решил для интереса посмотреть профайлером как оно там работает. Столкнулся с полным несоответствием тому, что я ожидал увидеть. Есть примерно такой код: // ввод n for (int i = 0; i <= n; ++i) if (is_palindrome(i) && is_palindrome(i*i)) // вывести число-палиндром, квадрат которого тоже палиндром http://www.cyberforum.ru/cpp-beginners/thread793066.html
Пережитки С C++
Добрый день. У меня вопрос по поводу пережитков языка С. Сегодня открыл чужой код и встретил такие конструкции: FILE *p_f = fopen(file_name, "filename"); fprintf(p_f, "VarName= %d\n", someVar); sprintf(data_name, "%s/data.txt", dir_name); и подобную хрень. Это случаем не считается пережитками? Я привык, что чтение/запись в файл происходит с помощью потоков. Или эти конструкции работают...
ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? C++
void Array::getArray() // вывод массива { for (int ix = 0; ix < size; ix++) cout << setw(5) << ptr; // вывод элементов массива на экран cout << std::endl; // новая строка } ostream &operator<< (ostream &output, const Array &obj) {
C++ Реализация while в своем компиляторе http://www.cyberforum.ru/cpp-beginners/thread793028.html
В качестве курсовой делаю простенький компилятор. На входе он получает примерно подобный код: int y=10; float h=5.2; write(y); float x; x=0; x=x+read; Все работает. Но есть задание добавить цикл while, и тут появились сложности. С моей корявой реализацией я не знаю как его зациклить и как выйти в нужный момент из этого цикла... Если прога получает такую строчку: while a>b c=c+1; b=b+1;...
C++ Сделать функцию, которая принимает двумерный массив и возвращает индексы его максимального элемента(номер строки и столбца), с указателями, С++ Сделать функцию, которая принимает двумерный массив и возвращает индексы его максимального элемента(номер строки и столбца), с указателями, С++ подробнее

Показать сообщение отдельно
anubis1768
4 / 4 / 0
Регистрация: 23.02.2013
Сообщений: 151

Структура: Выполните сортировку данных по номеру билета - C++

23.02.2013, 17:31. Просмотров 525. Ответов 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
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
#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <cstdlib>
#define STRLEN 20
using namespace std;
#pragma pack (1)
struct student
{
    char name[STRLEN];
    int bilet;
    char tip[STRLEN];
    int age;
};
 
struct student** arr; //создаем указатель на указатель на структуру
struct student* tmp;//создаем указатель на структуру
 
int main()
{
    int i;
    int size=50;
    arr=new struct student*[size];//виделяем память в куче для массива указателей
    arr[0]=new struct student[size]; //виделяем память в куче для массива структур
    for (int i=0; i<size; i++) arr[i]=arr[0]+i;  //тут не понятно
 
     FILE* f;
    if((f = fopen("5.dat", "rb+")) == NULL) { printf("Oshibka pri otkrytii fajla.\n"); exit(1); }
    for (i=0; i<size; i++) 
    fread(arr[0]+i, sizeof(struct aeroflot), size, f); //вот эту строку еще поясните пожалуйста 
    fclose(f);
    for (i=0; i<size; i++) 
        for (int j=0; j<size-i-1; j++)            //Г®почему именно такой извращенный цикл? зачем?
            if ( (arr[j]->bilet)>(arr[j+1]->bilet) ){ //операция arr[j] возвращает указатель на структуру, верно?
                                                                         //поэтому мы здесь ставим оператор ->
                tmp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tmp;
            }
 
 
for ( i=0; i<size; i++) 
{
              cout << "Po nomeru: " << arr[i]->bilet << endl;
              cout << "--------------------" << endl;
      
}
 
delete[] arr[0];
delete[] arr;
system("PAUSE>NULL");
}
само задание:
Подготовьте массив указателей на student на 50 элементов.
Считайте все записи из файла "5.dat" .
Для чтения каждой отдельной записи осуществите динамический захват памяти.
Соответствующий адрес храните в массиве указателей.
Выполните сортировку данных по номеру билета - причем сортировать потребуется только указатели в массиве.
Выведите отсортированнный массив.

Если не трудно, то напишите открытые файла через С++ класс ifstream, работу которого я более менее понимаю. У меня самого не получаеться вот код:
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
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
 
#define STRLEN 20
#pragma pack (1)
struct student
{
    int bilet;
    std::string name;
    std::string tip;
    int age;
};
#pragma pack()
 
struct AEROFLOT** arr;
struct AEROFLOT* tmp;
struct AEROFLOT *pxas = new AEROFLOT[50];
 
int main(int argc, char** argv) {
    setlocale(LC_ALL, "Russian");
    std::ifstream text( "5.dat" );
    int size = 3;
    int temp;
    int min = 100000;
    std::string szstring;
    int i = 0;
    while( !text.eof() ) {
        text >> temp;
        pxas[i].bilet = temp;
        text >> szstring;
        pxas[i].name = szstring;
        text >> szstring;
        pxas[i].tip = szstring;
        text >> temp;
        pxas[i].age = temp;
        if( pxas[i].age < min )
            min = pxas[i].age;
        i++;    
    }
    for( int j = 0; j < i; j++ ) {
        arr[j] = &pxas[j];
    }
    
    for( int j = 0; j < i; j++) {
            if ( (arr[j]->bilet ) > ( arr[j+1]->bilet) ) {
                tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
            
    for ( i = 0; i < size; i++) {
        std::cout << "Po nomeru: " << arr[i]->bilet << std::endl;
        std::cout << "--------------------" << std::endl;
    }
    return 0;
}
Помогите пожалуйста

Добавлено через 42 минуты
up...

Добавлено через 1 час 7 минут
Что, никто не может помочь?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru