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

Поиск:

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


Новичок



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

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



feodorv, раньше было "Please, enter matrix dimension:" с ордним двоеточием, а щас после этой фразы почему то 2 двоеточия и с первого раза Enter не срабатывает
PM MAIL   Вверх
feodorv
Дата 22.10.2012, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(dimmon123 @  23.10.2012,  00:19 Найти цитируемый пост)
после этой фразы почему то 2 двоеточия

Цитата(dimmon123 @  22.10.2012,  23:34 Найти цитируемый пост)
    if( header != NULL ) printf( "%s: ", header);

Цитата(dimmon123 @  22.10.2012,  23:34 Найти цитируемый пост)
        dim = getNumber( "Please, enter matrix dimension:" );  

Где-то одну ':' надо убирать. Я в примере убрал с "Please..."

Цитата(dimmon123 @  23.10.2012,  00:19 Найти цитируемый пост)
первого раза Enter не срабатывает 

Это как?


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


Новичок



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

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



Цитата(feodorv @  22.10.2012,  23:23 Найти цитируемый пост)
Это как?

ну например вводим мы не буквы а число 2, появляется снова плавающая _ и приходится еще раз 2 ввести, тогда выскакивает следующее действие


и почему то в коде где автозаполнение все время заполняются одни и теже цыфры

Это сообщение отредактировал(а) dimmon123 - 22.10.2012, 23:30
PM MAIL   Вверх
feodorv
Дата 23.10.2012, 00:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(dimmon123 @  23.10.2012,  00:26 Найти цитируемый пост)
ну например вводим мы не буквы а число 2, появляется снова плавающая _ и приходится еще раз 2 ввести, тогда выскакивает следующее действие

Ну я же сказал - вместо scanf, а не вместе с ней. Это
Цитата(dimmon123 @  22.10.2012,  23:34 Найти цитируемый пост)
       scanf_s( "%d", &dim);

теперь лишнее...


Твой препод - маньяк. Вот тебе ещё один вариант с редактированием (возможен BACKSPACE):
Код

int getNumberEx( const char *header )
{
  char line[16];
  int i = 0, len = 0;

  if( header != NULL ) printf( "%s: \n", header); else printf( "\n" ); // <- это важно!

  for( i = 0; i < sizeof(line); i++) line[i] = ' ';
  line[sizeof(line)-1] = '\0';

  while( 1 )
  {
    int c = _getch();
    if( (len > 0 && c >= '0' && c <= '9') ||
        (len == 0 && c >= '1' && c <= '9') ||
        (len == 0 && c == '-') )
    {
      if( len < sizeof(line)-1 )
      {
        _putch( c );
        line[len++] = c;
      }
    }
    else if( c == 8 && len > 0 )
    {
      len--;
      line[len] = ' ';
      _putch( '\r' );
      _cputs( line );
      line[len] = '\0';
      _putch( '\r' );
      _cputs( line );
      line[len] = ' ';
    }
    else if( c == 3 )
      exit( 0 );
    else if( c == '\r' && len > 0 )
    {
      line[len] = '\0';
      _putch( '\n' );
      return (int) strtol( line, NULL, 10);
    }
  }
}



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


Новичок



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

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



Сообщение от PodOnoK 
прямоугольный массив
Код C#
1
2
3
4
5
int[,] a;
//или так
int[,] b = new int[2, 3];
//или так
int[,] c = {{1, 2, 3}, {4, 5, 6}};
 Сообщение от PodOnoK 
ступенчатый массив
Код C#
1
2
3
4
5
6
int[][] a = new int[3][];
a[0] = new int[5];
a[1] = new int[3];
a[2] = new int[4];
//или так
int[][] b = {new int[5], new int[3], new int[4]};

PM MAIL WWW   Вверх
dimmon123
Дата 26.10.2012, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



feodorv, ставлю  dim = getNumberEx в местах где нужен ток ввод цифр и ерунда получается..либо прога сама у меня глючит..в общем проверь пожалуйста этот код полностью))
Код

// ConsoleApplication8.cpp: определяет точку входа для консольного приложения.
//

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

 int i,j,k;
 int dim = 0;
 int mt1[n][n];
 int mt2[n][n];
 int res[n][n];
 int tmp = 0;
 
 int getNumberEx( const char *header )
{
  char line[16];
  int i = 0, len = 0;

  if( header != NULL ) printf( "%s: \n", header); else printf( "\n" ); // <- это важно!

  for( i = 0; i < sizeof(line); i++) line[i] = ' ';
  line[sizeof(line)-1] = '\0';

  while( 1 )
  {
    int c = _getch();
    if( (len > 0 && c >= '0' && c <= '9') ||
        (len == 0 && c >= '1' && c <= '9') ||
        (len == 0 && c == '-') )
    {
      if( len < sizeof(line)-1 )
      {
        _putch( c );
        line[len++] = c;
      }
    }
    else if( c == 8 && len > 0 )
    {
      len--;
      line[len] = ' ';
      _putch( '\r' );
      _cputs( line );
      line[len] = '\0';
      _putch( '\r' );
      _cputs( line );
      line[len] = ' ';
    }
    else if( c == 3 )
      exit( 0 );
    else if( c == '\r' && len > 0 )
    {
      line[len] = '\0';
      _putch( '\n' );
      return (int) strtol( line, NULL, 10);
    }
  }
}
 
void main()
{
   do 
   {
       /* вопрос о размерности */
       system ("cls");
        dim = getNumberEx( "Please, enter matrix dimension:" );  
       scanf_s( "%d", &dim);
       if( dim <= 0 || dim > n ) 
       {
          printf( "Invalid value %d\n", dim);
          continue;
       }
 
       /* вопрос о заполнении матрицы (случайно, диагонально, с клавиатуры) */
       system ("cls");
       printf (" (1) - Aftozapolnenie\n (2) - Zapolnenie diagonali\n (3) - Vvod s klaviaturi\n (4) - Exit\n\n Please select: ");
       char iSelect = _getch();
       if( iSelect == '4' ) break;

       /* заполнение матриц в зависимости от выбора пользователя */
       switch( iSelect )
       {
          case '1': 
             for( i=0; i<dim; i++)
                for( j=0; j<dim; j++)
                {
                   mt1[i][j]=rand();
                   mt2[i][j]=rand();
                 }
             break;

          case '2':
             for( i=0; i<dim; i++)
                for( j=0; j<dim; j++)
                {
                   if (i==j)
                    mt1[i][j]=1;
                  else
                    mt1[i][j]=0;
                   if (i==j)
                    mt2[i][j]=1;
                  else
                    mt2[i][j]=0;
                }
             break;
                
          case '3':
              printf("\nEnter mt1:\n");
              for( i=0; i<dim; i++)
                 for( j=0; j<dim; j++)
                 {
                    dim = getNumberEx("  Element %d, %d:  ", i, j);
                    scanf_s(" %d", &mt1[i][j]);
                 }
             
              printf("\nEnter mt2:\n");
              for( i=0; i<dim; i++)
                 for( j=0; j<dim; j++)
                 {
                    dim = getNumberEx("  Element %d, %d:  ", i, j);
                    scanf_s( "%d", &mt2[i][j]);
                 }
                 break;
                
          default: 
             printf ("\n\nBad select, try again\n\n"); 
             _getch();  
             continue;
        }
    
    do 
      {
         /* печать матриц */
         system ("cls");
         printf("mt1:\n");
         for( i=0; i<dim ;i++)
         {
             for( j=0; j<dim; j++)
             {
               printf( " \t%d", mt1[i][j]);
             }
         putchar('\n');
         }

         printf("mt2:\n");
         for( i=0; i<dim ;i++)
         {
             for( j=0; j<dim; j++)
             {
               printf( " \t%d", mt2[i][j]);
             }
         putchar('\n');
         }
         _getch();  
             
         /* вопрос о редактировании матриц (хочу редактировать mt1, хочу редактировать mt2, не хочу редактировать) */
         system ("cls");
         dim = getNumberEx (" (1) - Edit mt1\n (2) - Edit mt2\n (3) - Exit\n\n Please select: ");
         char iSelect = _getch();
         if( iSelect == '3' ) break;
         
         /* вопрос об редактируемом элементе (координаты+значение) */
         system ("cls");
         dim = getNumberEx (" Enter x,y in [x,y] format: ");
       
         /* меняем значение у mt1 или mt2 */
         int i = 0, j = 0;
         scanf_s ("%d, %d", &i, &j);
         
         printf (" New value: ");
         int tmp = 0;
         scanf_s ("%d", &tmp);
         if( iSelect == '1' ) { mt1[i][j] = tmp; dim = getNumberEx (" Value [%d, %d] is: %d", i, j, mt1[i][j]);}
         else { mt2[i][j] = tmp;  getNumberEx (" Value [%d, %d] is: %d", i, j, mt2[i][j]);}
         _getch();

     }while (true);

        /* вопрос об операции с матрицами (сложение, вычитание) */
        system ("cls");
        dim = getNumberEx (" (1) -  Mult\n (2) - Summa\n \n Please select: ");
        iSelect = _getch();

        /* выполнение операций над матрицами в зависимости от выбора пользователя */
       switch( iSelect )
        { 
         case '1':             
            for( i=0; i<dim; i++)
               for( j=0; j<dim; j++)
               {    
                   res[i][j] = 0;
                   for( k = 0; k<dim; k++)  res[i][j] += mt1[i][k] * mt2[k][j];
                }
            break;

         case '2': 
            for(i=0;i<dim;i++)
               for(j=0;j<dim;j++)
                  res[i][j] = mt1[i][j] + mt2[i][j];
            break;

         default: 
            printf ("\n\nBad select, try again"); 
            _getch();  
            continue;
        }

        /* печать операции и результата */
        printf( "Operation:\n %s\n", (iSelect == '1') ? "Multiplication" : "Addition");

        printf( "\nResult:\n" );
        for( i=0; i<dim ;i++)
        {
            for( j=0; j<dim; j++)
            {
                printf( " \t%d", res[i][j]);
            }
        putchar('\n');
        }
        _getch();  

   }while (true);
}


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


Эксперт
****


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

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



Цитата(dimmon123 @  26.10.2012,  22:35 Найти цитируемый пост)
dim = getNumberEx в местах где нужен ток ввод цифр

"dim = getNumberEx" - это не волшебная палочка. Нужно всё таки понимать, что делает  getNumberEx, что означает dim...

getNumberEx всего лишь возвращает введённое с клавиатуры число (одно-единственное число). Зачем это число грузить исключительно в dim? И ничего, если dim, которую мы так бережно запрашивали у пользователя в начале и под которую готовили матрицы, вдруг меняется где-то в середине цикла? 


Почему scanf до сих пор в коде? Почему scanf используется вместе с getNumberEx?
Цитата(dimmon123 @  26.10.2012,  22:35 Найти цитируемый пост)
       dim = getNumberEx( "Please, enter matrix dimension:" );  
       scanf_s( "%d", &dim);

Вот скажи, что ты ожидаешь от этого кода? Что сделает scanf со значением переменной dim, полученным от getNumberEx? Третий раз пишу:
Цитата(feodorv @  23.10.2012,  01:46 Найти цитируемый пост)
вместо scanf, а не вместе с ней.

И вообще, что делает scanf? Для чего она предназначена?


Ты в курсе, что форматная строка вида "  Element %d, %d:  " используется в printf и printf-подобных функциях, которые разбирают форматную строку и понимают, что %d соответствует печати целого числа, которое передаётся этой функции в качестве аргумента? У нас getNumberEx - printf-подобная функция? Она умеет разбирать форматную строку? Совсем нет.


Я в печали. Я не знаю что делать. Писать длинные инструкции типа "прямо 100 метров, потом направо 200 метров, потом 2 шага назад" я не в состоянии. Делать за тебя лабу - не вариант, лаба - твоя, не моя. Я призываю тебя собраться с мыслями, разобрать работу программы, применить отладчик для лучшего понимания того, что и как происходит в программе и т.д.


Для примера приведу исправленный вариант кода:
Цитата(dimmon123 @  26.10.2012,  22:35 Найти цитируемый пост)
         /* вопрос об редактируемом элементе (координаты+значение) */
         system ("cls");
         dim = getNumberEx (" Enter x,y in [x,y] format: ");
       
         /* меняем значение у mt1 или mt2 */
         int i = 0, j = 0;
         scanf_s ("%d, %d", &i, &j);
         
         printf (" New value: ");
         int tmp = 0;
         scanf_s ("%d", &tmp);
         if( iSelect == '1' ) { mt1[i][j] = tmp; dim = getNumberEx (" Value [%d, %d] is: %d", i, j, mt1[i][j]);}
         else { mt2[i][j] = tmp;  getNumberEx (" Value [%d, %d] is: %d", i, j, mt2[i][j]);}
         _getch();

Остальное можно сделать по аналогии, если понимать, что делаешь...

Код
         /* вопрос об редактируемом элементе (координаты+значение) */
         system ("cls"); // <- очищаем экран. Это красиво в уже отлаженной программе, но 
                               //      в программе, которую только разрабатываем, это сильно мешает...

         i = getNumberEx (" Enter x: ");
         j = getNumberEx (" Enter y: ");
         if( i < 0 || i >= dim || j < 0 || j >= dim ) // <- проверим правильность введённых значений координат
         {
            printf( "Invalid values. Please, try again\n" );
            _getch();
            continue;
         }

         int tmp = getNumberEx( " New value: " ); // <- получаем новое значение для ячейки матрицы

        /* меняем значение у mt1 или mt2 */
         if( iSelect == '1' ) 
         {
             mt1[i][j] = tmp;
             printf( "New value of mt1[%d][%d] is %d\n", i, j, mt1[i][j]);
         }
         else 
         {
             mt2[i][j] = tmp;
             printf( "New value of mt2[%d][%d] is %d\n", i, j, mt2[i][j]);
         }
         _getch();

И никаких scanf, %d в getNumberEx, ...

Это сообщение отредактировал(а) feodorv - 26.10.2012, 22:46


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

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

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

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

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


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

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


 




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


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

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