Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание двумерного массива 
:(
    Опции темы
dimmon123
Дата 13.10.2012, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



Привет!подскажите как будет выглядеть код с таким заданием: Реализовать программу "заполнение матрицы" создающую двумерный массив 2х2 чисел с плавающей точкой, запрашивающую у пользователя значение каждого элемента массива в формате "введите элемент 1,1 :" и выводящую заполненный пользователем массив на экран.
Синтаксис объявления двумерного массива: 
 ТипЭлементовМассива ИмяМассива[РАЗМЕРНСОТЬ_1_ИЗМEРЕНИЯ][РАЗМЕРНОСТЬ_2_ИЗМЕРЕНИЯ] ; 
В качестве РАЗМЕРНСОТЬ_1_ИЗМEРЕНИЯ и РАЗМЕРНСОТЬ_2_ИЗМEРЕНИЯ нельзя использовать переменные - можно использовать только непосредственные значения. 
Для вывода матрицы на экран воспользуйтесь функцией printf. В строке форматирования для перевода строки указывайте \n, а для выравнивания столбцов воспользуйтесь символом табуляции - \t. 
Для обхода всех элементов матрицы воспользуйтесь циклом for. 
Обратите особое внимание на то, что РАЗМЕРНСОТЬ_1_ИЗМEРЕНИЯ и РАЗМЕРНСОТЬ_2_ИЗМEРЕНИЯ при создании массива - это количество элементов, а не максимально допустимый индекс в массиве. 
Элементы массива всегда нумеруются с 0. Соответственно, если Вы создаете массив из 3 элементов, то вы можете обращаться только к первым 3м элементам, а именоо - с индексом 0, с индексом 1 и с индексом 2. Обращение к элементу с индексом 3 может привести к непредсказуемым результатам.
PM MAIL   Вверх
feodorv
Дата 13.10.2012, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  13.10.2012,  20:28 Найти цитируемый пост)
В качестве РАЗМЕРНСОТЬ_1_ИЗМEРЕНИЯ и РАЗМЕРНСОТЬ_2_ИЗМEРЕНИЯ нельзя использовать переменные - можно использовать только непосредственные значения. 

Так это хорошо!
Код

#define DIM1    2
#define DIM2    2

double massive[DIM1][DIM2]; 


Цитата(dimmon123 @  13.10.2012,  20:28 Найти цитируемый пост)
Для обхода всех элементов матрицы воспользуйтесь циклом for. 

Одним? Или можно вложенным?
Код

int i, j;

for( i = 0; i < DIM1; i++)
  for( j = 0; j < DIM2; j++)
  {
    printf( "введите элемент %d,%d :", i, j);
    scanf( "%f", &massive[i][j]);
    printf( "\n" );
  }


Цитата(dimmon123 @  13.10.2012,  20:28 Найти цитируемый пост)
Для вывода матрицы на экран воспользуйтесь функцией printf

Код

for( i = 0; i < DIM1; i++)
  for( j = 0; j < DIM2; j++)
    printf( "элемент %d,%d : %f\n", i, j, massive[i][j]);



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 13.10.2012, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



в общем код должен получиться вот такой?
Код
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "iostream"


using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
#define DIM1    2
#define DIM2    2

double massive[DIM1][DIM2]; 

int i, j;

for( i = 0; i < DIM1; i++)
  for( j = 0; j < DIM2; j++)
  {
    printf( "Enter the element %d,%d :", i, j);
    scanf_s( "%f", &massive[i][j]);
    printf( "element %d,%d : %f\n", i, j, massive[i][j]);
  }


}



Модератор: не забываем пользоваться кнопочкой "Код"
PM MAIL   Вверх
feodorv
Дата 13.10.2012, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  13.10.2012,  22:36 Найти цитируемый пост)
#include "iostream"

using namespace std;


Гм. Стоит определиться, что Вам нужно - C или C++... Ибо тогда лучше
Код

const int DIM1 = 2;
const int DIM2 = 2;



Цитата(dimmon123 @  13.10.2012,  22:36 Найти цитируемый пост)
   printf( "Enter the element %d,%d :", i, j);
    scanf_s( "%f", &massive[i][j]);
    printf( "element %d,%d : %f\n", i, j, massive[i][j]);

Ввод значений и их вывод лучше разделить, даже если это будет второй обход матрицы.


А так - пойдёт  smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 13.10.2012, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



feodorv, нужно в С++ через Visual Studio 2012

Цитата(feodorv @  13.10.2012,  22:20 Найти цитируемый пост)
Ввод значений и их вывод лучше разделить, даже если это будет второй обход матрицы.


а как разделить?))

Это сообщение отредактировал(а) dimmon123 - 13.10.2012, 22:47
PM MAIL   Вверх
feodorv
Дата 13.10.2012, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  13.10.2012,  23:45 Найти цитируемый пост)
а как разделить?))


Цитата(feodorv @  13.10.2012,  22:24 Найти цитируемый пост)

for( i = 0; i < DIM1; i++)
  for( j = 0; j < DIM2; j++)
  {
    printf( "введите элемент %d,%d :", i, j);
    scanf( "%f", &massive[i][j]);
  }

for( i = 0; i < DIM1; i++)
  for( j = 0; j < DIM2; j++)
    printf( "элемент %d,%d : %f\n", i, j, massive[i][j]);




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 14.10.2012, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



вот код получился: 
Код

int _tmain(int argc, _TCHAR* argv[])
{
const int DIM1 = 2;
const int DIM2 = 2;

double massive[DIM1][DIM2]; 

int i, j;

for( i = 0; i < DIM1; i++)
  for( j = 0; j < DIM2; j++)
  {
    printf( "Enter the element %d,%d :", i, j);
    scanf_s( "%f", &massive[i][j]);
  }

for( i = 0; i < DIM1; i++)
  for( j = 0; j < DIM2; j++)
    printf( "Element %d,%d : %d\n", i, j, massive[i][j]);
    return 0;



массив после ввода элементов отображается вот так(во вложенном фото), правильно?

Это сообщение отредактировал(а) dimmon123 - 15.10.2012, 15:57

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  Безымянный.png 68,33 Kb
PM MAIL   Вверх
dimmon123
Дата 14.10.2012, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



потом надо будет сделать: Модифицировать программу  так, чтобы пользователь выполнял заполнение 2х квадратных матриц. После этого программа должна выполнять сложение введенных пользователем матриц и вывод исходных матриц и результата на экран.

 

Для обхода всех элементов матрицы в процессе сложения воспользуйтесь циклом do-while.
PM MAIL   Вверх
feodorv
Дата 14.10.2012, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  14.10.2012,  18:13 Найти цитируемый пост)
правильно?

Неправильно. Это же заметно невооружённым глазом  smile 
Ошибка в формате вывода:
Цитата(dimmon123 @  14.10.2012,  18:13 Найти цитируемый пост)
    printf( "Element %d,%d : %d\n", i, j, massive[i][j]);

Для double предусмотрены форматы %e,%f,%g,%E,%F,%G, но никак не %d.


Цитата(dimmon123 @  14.10.2012,  18:36 Найти цитируемый пост)
потом надо будет сделать

Делайте по аналогии smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 15.10.2012, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



feodorv, вроде код прописал:


Код

#include "stdio.h"
#include "stdafx.h"
#include "windows.h"
#include "math.h"
#include "conio.h"
#include "stdlib.h"
#define n 100

 int i,j;
 int nl1,nc1;
 int nl2,nc2;    
 int nl,nc;
 int mt1[n][n];
 int mt2[n][n];
 int summa[n][n];
 
void main()
{
   do {

        printf("Nomer liniy dlia mt1:");  scanf_s("%d",&nl1);
        printf("Nomer colon dlia mt1:"); scanf_s("%d",&nc1);
        
        printf("Nomer liniy dlia mt2:");  scanf_s("%d",&nl2);
        printf("Nomer colon dlia mt2:"); scanf_s("%d",&nc2);
 
        if(nc1!=nc2 && nl1!=nl2)
        {
                printf("Summa nevozmojna!");
        }
 
        else
        {
                nl=nl1=nl2;             
                nc=nc1=nc2;
                
                printf("\nmt1:\n");
                for(i=1;i<=nl;i++)
                {
                        for(j=1;j<=nc;j++)
                        {
                                printf("Element %d, %d:  ",i,j);
                                scanf_s(" %d",&mt1[i][j]);
                        }
                }
                
                printf("\nmt2:\n");
                for(i=1;i<=nl;i++)
                {
                        for(j=1;j<=nc;j++)
                        {
                                printf("Element %d, %d:  ",i,j);
                                scanf_s("%d",&mt2[i][j]);
                        }
                }
                printf("\nResultat:\n");
                for(i=1;i<=nl;i++)
                {
                        for(j=1;j<=nc;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=1;i<=nl;i++)
                {
                        for(j=1;j<=nc;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                }
        }
        _getch();
    }
    while (true);
}



Добавлено @ 12:58
feodorv, а как сделать  в высланном мной коде чтобы пользователю перед вводом элементов каждой из матриц предлагалось произвести автозаполнение всех элементов матрицы случайными величинами, либо заполнение диагонали матрицы единицами, а остальных элементов - нулями, либо ввод каждого элемента с клавиатуры - по желанию пользователя?[code=cpp]


Это сообщение отредактировал(а) dimmon123 - 15.10.2012, 15:45
PM MAIL   Вверх
feodorv
Дата 15.10.2012, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  15.10.2012,  13:57 Найти цитируемый пост)
 вроде код прописал

Что-то в этом роде smile Несколько замечаний:
  • Цитата(dimmon123 @  15.10.2012,  13:57 Найти цитируемый пост)
                    for(i=1;i<=nl;i++)

    и подобное. В C/C++ отсчёт идет от нуля, не от единицы, правильная запись:
    Код

    for(i=0;i<nl;i++)

    иначе Вы вылезаете за пределы массива (очень грубая ошибка!)
  • Цитата(dimmon123 @  15.10.2012,  13:57 Найти цитируемый пост)
            if(nc1!=nc2 && nl1!=nl2)

    Тогда стОит проверить, что nc1... > 0 и <= n (мало что).
    Но, мне кажется, размерности можно запрашивать один раз (зачем два-то?)
  • Цитата(dimmon123 @  14.10.2012,  18:36 Найти цитируемый пост)
    Для обхода всех элементов матрицы в процессе сложения воспользуйтесь циклом do-while. 

    У Вас же сплошной for, а do-while используется глобально, для всей задачи в целом.


Цитата(dimmon123 @  15.10.2012,  13:57 Найти цитируемый пост)
 как сделать  в высланном мной коде чтобы пользователю перед вводом элементов каждой из матриц предлагалось произвести автозаполнение всех элементов матрицы случайными величинами, либо заполнение диагонали матрицы единицами, а остальных элементов - нулями, либо ввод каждого элемента с клавиатуры - по желанию пользователя? 

Можно предложить пользователю список действий под номерами, например, как сделано здесь smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
feodorv
Дата 15.10.2012, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Да, всё время забываю Вас попросить при демонстрации кода пользоваться кнопкой "Код", находящейся над полем ввода сообщения, чтобы код в сообщении культурно выделялся.
И, пожалуйста, поправьте в этом смысле свои прежние сообщения smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 15.10.2012, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



Цитата(feodorv @  15.10.2012,  15:18 Найти цитируемый пост)
Да, всё время забываю Вас попросить при демонстрации кода пользоваться кнопкой "Код", находящейся над полем ввода сообщения, чтобы код в сообщении культурно выделялся.И, пожалуйста, поправьте в этом смысле свои прежние сообщения  


все сделал))спасибо!буду доделывать лабу, там еще 3 задания smile 

Задание 4: Модифицировать программу из предыдущего задания так, чтобы после заполнения 2х матриц пользователя спрашивали, желает ли он выполнить умножение или сложение матриц и выполнялась выбранная пльзователем операция. После этого программа должна осуществлять вывод исходных матриц, наименования операции и результата на экран.
 
Задание 5: Модифицировать программу из предыдущего задания так, чтобы сначала программа узнавала у пользователя размеры используемых квадратных матриц (в пределах от 1 до 20) и все действия производились над матрицами указанных пользователем размеров. 
 
Изначально создавайте матрицы 20х20, а в процессе работы используйте только первые iElementNum элементов матрицы, где iElementNum - размер матрицы, укказываемый пользователем. 
 
Результат продемонстрировать преподавателю. 
 
Задание 6: Модифицировать программу из предыдущего задания так, пользователь имел возможность при задании матриц редактировать любой элемент:пользователю задается вопрос, желает ли он редактировать матрицу. Если желает - пользователь вводит координаты редактируемого элемента и новое значение. Затем процедура повторяется.


Это сообщение отредактировал(а) dimmon123 - 15.10.2012, 16:06
PM MAIL   Вверх
feodorv
Дата 15.10.2012, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  15.10.2012,  16:59 Найти цитируемый пост)
все сделал))

Спасибо!

Цитата(dimmon123 @  15.10.2012,  16:59 Найти цитируемый пост)
там еще 3 задания

Ну хорошо хоть не "отрицательный факториал" smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 15.10.2012, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



Цитата(feodorv @  15.10.2012,  16:13 Найти цитируемый пост)
Ну хорошо хоть не "отрицательный факториал" 

отрицательный я так и не понял как сделать да и в основном задании такого условия не было, это препод уже потом придумал, буду выносить ему мозг чтоб не делать отрицательный)))
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0998 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.