Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Структуры и динамическая памьять


Автор: denfis 9.12.2011, 14:52
Помогите пожалуста з задачками

1. Описать структуру с именем TRAIN, которая включает следующие поля:
NAZV - окончательный пункт руху поезда
NUMR - номер поезда
DATE - дата отправления
TIME - время отправления

Написать программу что делает следующие действия:
ввод с клавиатуры данных в массив RASP, что складается з N сменных типу TRAIN
сортировка записов за алфавитом за названием пункта назначения
вывод на экран информации про поезда, что отправляются после даты и времени что было введено з клавиатуры, если таких поездов нету вывести сообщение


2. Написать программу используя динамичное выделение памьяти:
Данна прямокутная целочисельная матрица. Вызначить количество столпцов, которые не включают жодного нульового элемента.
Характеристикой рядка целочисельной матрицы назовем суму её четных положительных елементов. Переставляя радки данной матрицы, розместить их у соответствия сростания характеристик.

P.S. глубачайше извеняюсь за мой руский    

Автор: bobik02 9.12.2011, 17:15
1. как то так.
Код

#include <iostream>
#include <string>
using namespace std;

const int N = 2;

struct train {
    string nazv;
    string numr;
    string date;
    string time;
};

int main() {
    train rasp[N];

// in
for(int i=0; i<N; i++) {
    cout << i << " enter name: ";
    cin >> rasp[i].nazv;
    cout << i << " enter numr: ";
    cin >> rasp[i].numr;
    cout << i << " enter date: ";
    cin >> rasp[i].date;
    cout << i << " enter time: ";
    cin >> rasp[i].time;
}


// sort
for(int i=0; i<N; i++) {
    for(int j=0; j<N; j++) {
        if  ( rasp[i].nazv <rasp[j].nazv  )

        {
            string tmp = rasp[i].nazv;
            rasp[i].nazv = rasp[j].nazv ;
            rasp[j].nazv  = tmp;

            tmp = rasp[i].numr;
            rasp[i].numr = rasp[j].numr;
            rasp[j].numr  = tmp;

            tmp = rasp[i].date;
            rasp[i].date = rasp[j].date;
            rasp[j].date  = tmp;

            tmp = rasp[i].time;
            rasp[i].time = rasp[j].time;
            rasp[j].time  = tmp;
        }
    }
}

cout << endl;
// view
for(int i=0; i<N; i++)
    cout << rasp[i].nazv << " "<<  rasp[i].numr << " " << rasp[i].date << " " << rasp[i].time << "\n";


    return 0;
}

Вывод на экран(да и не только) было лень доделать, попробуй сам.

Автор: denfis 9.12.2011, 18:33
Cпасибо smile  и помогите кто-нибудь со второй задачой

Автор: Dov 11.12.2011, 01:03
Код
int main()
{
    srand((unsigned)time(NULL));

    int       rows;             // количество строк.
    int       cols;             // количество столбцов.

    // просим пользователя ввести размеры матрицы
    cout << "enter the dimensions of the matrix:\n rows: ";
    cin  >> rows;
    cout << " cols: ";
    cin  >> cols;        
    
    // выделяем память под матрицу
    int ** pp;
    pp = new int * [rows];
    for(int i = 0; i < rows; i++)
        pp[i] = new int[cols];

    // заполняем матрицу случайными числами.
    for(int i = 0; i < rows; i++)
        for(int j = 0; j < cols; j++)
            pp[i][j] = rand() % 20 - 10;

    // динамический массив счётчиков сумм эл-тов
    int * sum;
    sum = new int[rows];

    // считаем сумму нужных эл-тов каждого ряда матрицы и заносим в массив счётчиков 
    for(int i = 0; i < rows; i++)
    {
        sum[i] = 0; 
        for(int j = 1; j < cols; j += 2)
            if(pp[i][j] > 0)
                sum[i] += pp[i][j];
    }

    // выводим на экран матрицу и 'характеристику' каждого    ряда
    cout << "\n\tmatrix " << rows << "x" << cols << ":\n";
    cout << "before:" << setw(4 * (cols + 1)) << "sum:\n" ;
    for(int i = 0; i < rows; i++)
    {
        for(int j = 0; j < cols; j++)
            cout << setw(4) << pp[i][j];
        cout << setw(8) << sum[i] << endl;
    }

    // подсчитываем количество столбцов без нулей
    int    count = 0;             // счётчик столбцов не содержащих нули
    for(int j = 0; j < cols; j++)
    {
        int i;
        for(i = 0; i < rows; i++)
            if(pp[i][j] == 0)
                break;
            
            if(i == rows)
                count++;
    }    
    cout << "\ncolumn without zeros: " << count << endl;

    // переставляем строки матрицы по возрастанию 'характеристик' 
    for(int i = 0; i < rows - 1; i++)
    {
        for(int j = i + 1; j < rows; j++)
        {
            if(sum[i] > sum[j])
            {
                int * p = pp[i];
                pp[i]   = pp[j];
                pp[j]   = p;

                int    a   = sum[i];
                sum[i]  = sum[j];
                sum[j]  = a;
            }
        }
    }

    // выводим 'упорядоченную' матрицу
    cout << "\nafter: " << setw(4 * (cols + 1)) << "sum:\n";
    for(int i = 0; i < rows; i++)
    {
        for(int j = 0; j < cols; j++)
            cout << setw(4) << pp[i][j];
        cout << setw(8) << sum[i] << endl;
    }
    cout << endl;

    // освобождаем память
    delete [] sum;
    for(int i = 0; i < rows; i++)
        delete [] pp[i];
    delete [] pp;

    return 0;
}

Автор: denfis 12.12.2011, 00:20
Агромное спасибо smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)