Форум: Форум C++Разное
Новые темы: 00
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сформировать вектор В из максимальных элементов каждой строки матрицы с произвольным размером N
 
 автор: Oazis   (09.12.2007 в 03:28)   письмо автору
 
 

Помогите решить задачу: Дана матрица A: array [1..N,1..N] of integer. Сформировать век¬тор В из максимальных элементов каждой строки.Реализовать для произвольного порядка матрицы (задаётся пользователем)

  Ответить  
 
 автор: Фитч   (09.12.2007 в 09:40)   письмо автору
 
   для: Oazis   (09.12.2007 в 03:28)
 

Эээ...A: array[1..N, 1..N] of integer; - это не С++, вы просто для примера так пишете, или нужно решение на паскале/дельфи?

  Ответить  
 
 автор: Oazis   (09.12.2007 в 14:00)   письмо автору
 
   для: Фитч   (09.12.2007 в 09:40)
 

просто та надо решить C++

  Ответить  
 
 автор: cheops   (10.12.2007 в 04:14)   письмо автору
 
   для: Oazis   (09.12.2007 в 03:28)
 

Можно поступить следующим образом
#include <iostream>
#include <vector>
using namespace std;

int main()
{
  // Вектор с целочисленными элементами
  vector<int> coll, result;
  
  int count = 0;
  cout << "Введите размер матрицы N: ";
  cin >> count;

  try
  {
    // Заполняем коллекцию
    int temp = 0;
    for(int j = 0; j < count; j++)
    {
      for(int i = 0; i < count; i++)
      {
        cout << "Введите элемент (" << j << "," << i << "): ";
        cin >> temp;
        coll.push_back(temp);
      }
    }
    // Выводим только что введённую матрицу
    cout << "Вы ввели следующую матрицу:\n";
    for(int j = 0; j < count; j++)
    {
      for(int i = 0; i < count; i++)
      {
        cout << coll[j*count + i];
      }
      cout << "\n";
    }
    // Ищем максимальные элементы в строках
    for(int j = 0; j < count; j++)
    {
      int max = coll[j*count];
      for(int i = 0; i < count; i++)
      {
        if(max < coll[j*count + i]) max = coll[j*count + i];
      }
      result.push_back(max);
    }
    // Выводим результат
    cout << "\nМаксимальные элементы в строках матрицы:\n";
    for(int i = 0; i < result.size(); i++)
    {
      cout << result[i] << "\n";
    }
  }
  catch(bad_alloc)
  {
    cout << "Не удалось выделить память под коллекцию\n";
  }

  return 0;
}

  Ответить  
 
 автор: Oazis   (10.12.2007 в 06:05)   письмо автору
 
   для: cheops   (10.12.2007 в 04:14)
 

Большое спаибо но такой вопрос нельзя ли ее подделать для С++ Expres там чуток отличается

  Ответить  
 
 автор: cheops   (10.12.2007 в 08:18)   письмо автору
 
   для: Oazis   (10.12.2007 в 06:05)
 

Откомпилировал в C++ Visual Studio Express 2005 - всё работает. Вы как проект создаёте? File->New->Project->General->Empty Project? Или используете CLR-проекты? Если у вас классическая C++ программа используйте File->New->Project->General->Empty Project - добавляйте в него файл. В этом случае будет использоваться стандартное окружение программы, которое позволит вам создавать и отлаживать кросплатформенный код, который будет одинаково работать как под Windows, так и под Linux/UNIX/Mac.

  Ответить  
 
 автор: Oazis   (10.12.2007 в 08:33)   письмо автору
 
   для: cheops   (10.12.2007 в 08:18)
 

всё идет но почему программа не выдает на экран саму матрицу???

  Ответить  
 
 автор: cheops   (10.12.2007 в 11:37)   письмо автору
 
   для: Oazis   (10.12.2007 в 08:33)
 

Хм... странно у меня выдаёт - можете прекрепить результат выполнения программы?

  Ответить  
 
 автор: Oazis   (11.12.2007 в 06:29)   письмо автору
152 Кб
 
   для: cheops   (10.12.2007 в 11:37)
 

вот смотрите

  Ответить  
 
 автор: cheops   (11.12.2007 в 07:47)   письмо автору
 
   для: Oazis   (11.12.2007 в 06:29)
 

Хм... ну вот же программа пишет - "Вы ввели следующую матрицу"

  Ответить  
 
 автор: Oazis   (12.12.2007 в 04:43)   письмо автору
 
   для: cheops   (11.12.2007 в 07:47)
 

sorry Всё работает спасибо

  Ответить  
 
 автор: Oazis   (12.12.2007 в 09:34)   письмо автору
 
   для: Oazis   (12.12.2007 в 04:43)
 

А что нужно сделать чтобы получился вывод "Не удалось выделить память под коллекцию"

  Ответить  
 
 автор: cheops   (13.12.2007 в 06:52)   письмо автору
 
   для: Oazis   (12.12.2007 в 09:34)
 

Исчерпать память компьютер :))) Правда на пример этой программы не очень удобно - придётся вручную забивать миллиарды значений. Однако, если коллекция заполняется автоматически и происходит сбой (например, цикл зацикливается) - этого можно легко добиться.

  Ответить  
 
 автор: Oazis   (13.12.2007 в 07:17)   письмо автору
 
   для: cheops   (13.12.2007 в 06:52)
 

A можно эту программу перевести на printf :-)

  Ответить  
 
 автор: cheops   (13.12.2007 в 07:52)   письмо автору
 
   для: Oazis   (13.12.2007 в 07:17)
 

Вообще printf() это чистый C, в C++ лучше ориентироваться на библиотеку <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <vector>
using namespace std;

int main()
{
  // Строка для временных значений
  char input[80];
  // Вектор с целочисленными элементами
  vector<int> coll, result;
  
  int count = 0;
  printf("%s""Введите размер матрицы N: ");
  // Читаем введённую строку
  fgets(input, 80, stdin);
  // Преобразуем её в целое число
  count = atoi(input);

  try
  {
    // Заполняем коллекцию
    int temp = 0;
    for(int j = 0; j < count; j++)
    {
      for(int i = 0; i < count; i++)
      {
        printf("Введите элемент (%d,%d): ",j, i);
        // Читаем введённую строку
        fgets(input, 80, stdin);
        // Преобразуем её в целое число
        temp = atoi(input);
        // Помещаем число в коллекцию
        coll.push_back(temp);
      }
    }
    // Выводим только что введённую матрицу
    printf("%s""Вы ввели следующую матрицу:\n");
    for(int j = 0; j < count; j++)
    {
      for(int i = 0; i < count; i++)
      {
        printf("%d ", coll[j*count + i]);
      }
      printf("%s""\n");
    }
    // Ищем максимальные элементы в строках
    for(int j = 0; j < count; j++)
    {
      int max = coll[j*count];
      for(int i = 0; i < count; i++)
      {
        if(max < coll[j*count + i]) max = coll[j*count + i];
      }
      result.push_back(max);
    }
    // Выводим результат
    printf("%s""\nМаксимальные элементы в строках матрицы:\n");
    for(int i = 0; i < result.size(); i++)
    {
      printf("%d\n", result[i]);
    }
  }
  catch(bad_alloc)
  {
    printf("%s""Не удалось выделить память под коллекцию\n");
  }

  return 0;
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования