Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Работа с массивами  (Прочитано 31731 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Kom_Junior
Гость
« : 03-04-2008 17:07 » 

Доброе время суток!
Я сейчас решаю задачу:
Переписать первые элементы каждой строки матрицы D(3,3), которые больше 10, в массив В.
вот примерно что есть:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream.h>
#include <stdio.h> //
#include <math.h> //
#include <conio.h> //

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{ randomize();
int d[3][3],i,j; // объявление массива D
for (i=1;i<3;i++) // заполнение массива с помощью функции random()
for (j=1;j<3;j++)
d[i][j]=random(9);
for (i=1;i<5;i++)
        for (j=1;j<5;j++)
        if (d[i][j]>10)              //если в строке присутствуют числа больше 10,переписать
        for (j=1;j<5;j++)    //значение в массив B
        d[i][j]=;


getch();
}
//---------------------------------------------------------------------------

 вопрос: как переписать в другой массив эти значения(как это реализовать!?)!?
« Последнее редактирование: 09-04-2008 19:59 от Вад » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 03-04-2008 17:18 » new

Kom_Junior,
Цитата
Переписать первые элементы каждой строки
Первые - это только один первый, или все "первые", которые идут до числа, большего 10? Или переписать "первый элемент строки матрицы, если он больше 10"? Или "переписать первый встретившийся в строке элемент, который больше 10"? Код с описанием задачи явно расходится.
И куда переписывать собираешься? В другой массив, или? Тогда где второй массив?
« Последнее редактирование: 03-04-2008 17:21 от Вад » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 03-04-2008 17:19 » 

а массив B что из себя представляет то ?
Записан

Kom_Junior
Гость
« Ответ #3 : 03-04-2008 17:27 » 

Вот задача:
Переписать первые элементы каждой строки матрицы D(3,3), которые больше 10, в массив В.
Здесь мне не понятно как проверить больше ли 10 первые элементы каждой из строк, и как затем переписать(если все же они больше) в другой массив. Допустим массив второй будет одномерным и все значения, которых максимум будет 3 как в него записать!!!
Я понимаю, что вопросы глупые, но в книгах не найду а учат в универе скверно: на лекциях одно, на лабораторках второе, а на СРС третье.........вот и ничего не знаю....
Код смотрел по другой задаче и щас соображаю что он не верен.
Подскажите как проверять больше или не больше 10 и как переписывать!!!!
Заранее спасибо
 
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 03-04-2008 17:32 » 

По-моему, если уж как-то интерпретировать эту кривовато построенную фразу, то, насколько я понимаю, задание всё-таки должно быть такое: "Переписать в массив B из каждой строки матрицы D первый элемент строки, который больше 10". Тогда тебе нужен ещё массив B из 3х элементов (коль уж строк у тебя 3). Проверяешь ты правильно, но переписать в массив B тебе нужно именно этот элемент, поэтому после if цикл у тебя явно лишний.

И ещё:
Цитата
for (j=1;j<5;j++)
- откуда ты взял 5? Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 03-04-2008 17:34 » 

Код:
#define x_max 3
#define y_max 3

int d[y_max][x_max];
int b[y_max]; //"вертикальный"

int b_count=0;
for(int y=0; y<y_max /*, b_count<y_max*/; y++)
{
   if(d[y][0]>10)
   {
      b[b_count]=d[y][0];
      b_count++;
   }
}

//b_count - количество элементов, переписанных в массив b
Записан

Kom_Junior
Гость
« Ответ #6 : 03-04-2008 17:38 » 

я же говорю, что код смотрел с другой задачи вот и появилась 5, а вопрос задачи кривой не по моей вине, так в методичке написано!
И еще, как хорошоЮ, что вы, парни, есть!
Записан
Kom_Junior
Гость
« Ответ #7 : 03-04-2008 17:42 » 

Уважаемый Алексей1153++, вы бы не могли объяснить представленный код поподробнее!?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 03-04-2008 17:43 » 

были, есть и будем есть!
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 03-04-2008 17:44 » 

Kom_Junior, какие строчки конкретно требуется объяснить ? Улыбаюсь
Записан

Kom_Junior
Гость
« Ответ #10 : 03-04-2008 17:51 » 

можно один раз, но как для чайника!?
Давайте если вам не трудно по порядку разберемся я скажу что мне не понятно а вы подскажете!?
описали инклуды, затем описываем двумерный массив d и одномерный массив b.
ВВодим с клавиатуры массив d.
Теперь проверяем, больше ли 10 первый элемент каждой строки массива d.
Проверив и найдя, например 2 элемента больше 10 переписываем их в массив b.
Выводим на экран массивы d и b.
Так!?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 03-04-2008 18:06 » 

ну, вроде так Улыбаюсь Дальше вопросы
Записан

Kom_Junior
Гость
« Ответ #12 : 03-04-2008 18:18 » 

Код:
#include <vcl.h>
#include <iostream.h>
#include <stdio.h> //подключение файла с помощью директивы, обеспечивающая ввод и вывод информации
#include <math.h> //для работы с математическими функциями
#include <conio.h> //для функции getch()

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int d[3][3],i,j; // объявление массива D
int b[3],i; // объявление массива B
for (i=0;i<3;i++) // ввод  двумерного массива, кстати не будет ошибки то, что после объявления
                 // одномерного массива идет заполнение 2мерного!?
for (j=0;j<3;j++)
scanf("%d",&d[i][j]);
getch();
}
//---------------------------------------------------------------------------

вроде так...
теперь не знаю как описать проверку первых элементов каждой их строк и затем запись найденных элементов в одномерный массив. Пожайлуста, когда будtnt отвечать сопровождайте код подробными комментариями как у меня, заранее спасибо. Улыбаюсь


 
« Последнее редактирование: 03-04-2008 18:23 от Алексей1153++ » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 03-04-2008 18:22 » 

Kom_Junior, если пишешь на C++, то лучше, имхо, scanf и getch забыть и смотреть в направлении iostream Улыбаюсь
Про первые элементы каждой строки - мне кажется, что всё-таки речь о проходе по строке в поиске элемента, который больше 10. Хотя, может, ошибаюсь Улыбаюсь
Записан
Kom_Junior
Гость
« Ответ #14 : 03-04-2008 18:26 » 

видишь, препод требует так как сам знает, со сканами и гетчами приходится делать ну так что, подскажешь!?
да, скорее всего ты прав, он должен искать первый больше десяти элемент и заносить его во второй массив
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 03-04-2008 18:27 » 

В таком случае нужно сделать два решения
первое - B - массив элементов больше 10
второе - B1 - "разреженный" двумерный массив элементов - т.е. каждый элемент >10 переписывается  из первого во второй под своим индексом.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kom_Junior
Гость
« Ответ #16 : 03-04-2008 18:30 » 

тогда В будет тоже 2мерным если под своим индексом!? А зачем!?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 03-04-2008 18:30 » 

или же 3-й вариант, можно придумать и четвертый Улыбаюсь
при первом попадании в условие копирование элемента и переход к другой строке.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kom_Junior
Гость
« Ответ #18 : 03-04-2008 18:31 » 

мне эту надо быстрее решить у неё еще 2 часть есть...Жаль((((
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 03-04-2008 18:31 » 

тогда так
Код:
#define x_max 3
#define y_max 3

int d[y_max][x_max];
int b[y_max]; //"вертикальный"

int b_count=0;
//перебираем строки
for(int y=0; y<y_max ; y++)
{
   //ищем в строке [y] первый элемент, бОльший чем 10
   for(int x=0; x<x_max; x++)
   {
       if(d[y][x]>10)
       {
          //нашли, записываем
          b[b_count]=d[y][x];
          //увеличиваем счётчик записанных элементов
          b_count++;
          //переходим к поиску в следующей строке
          break;
       }
   }
}

//b_count - количество элементов, переписанных в массив b

Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 03-04-2008 18:32 » 

А зачем!?
А чтоб у Заказчика не возникало вопросов типа:
Вы не выполнили (не поняли) задание
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 03-04-2008 18:35 » 

А может во второй части как раз и есть ответ на вопрос - какая размерность массива B
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kom_Junior
Гость
« Ответ #22 : 03-04-2008 18:36 » 

нет там надо оформить решение этой задачи в виде функции следующими способами:
1.   функция расположена после ее вызова;
2.   функция расположена после до ее вызова;
3.   функция расположена после в другом файле;
Записан
Kom_Junior
Гость
« Ответ #23 : 03-04-2008 18:38 » 

Алексей1153++, а b_count так и остается!? в смысле его не надо менять на числовое значение!?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 03-04-2008 18:41 » 

Алексей1153++, а b_count так и остается!? в смысле его не надо менять на числовое значение!?
ты сам понял что спросил?
b_count перед циклом инициализируется нулем
в цикле изменяется
Что менять на какое числовое значение? Жаль
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kom_Junior
Гость
« Ответ #25 : 03-04-2008 18:43 » 

еще вопрос, это не полный код программы!?
#define x_max 3
#define y_max 3

int d[y_max][x_max];
int b[y_max]; //"вертикальный"

int b_count=0;
//перебираем строки
for(int y=0; y<y_max ; y++)
{
   //ищем в строке [y] первый элемент, бОльший чем 10
   for(int x=0; x<x_max; x++)
   {
       if(d[y]
  • >10)
       {
          //нашли, записываем
          b[b_count]=d[y]
  • ;
          //увеличиваем счётчик записанных элементов
          b_count++;
          //переходим к поиску в следующей строке
          break;
       }
   }
}

//b_count - количество элементов, переписанных в массив b

чего не хватает!?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 03-04-2008 18:46 » 

Kom_Junior, какая структура программы на С
ответив на это вопрос ты автоматически выполнишь и второе задание
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kom_Junior
Гость
« Ответ #27 : 03-04-2008 18:46 » 

не понял...
Записан
Kom_Junior
Гость
« Ответ #28 : 03-04-2008 18:47 » 

вы счастливые, у вас 19:47, а у меня 0:47 башка не варит...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #29 : 03-04-2008 18:50 » 

Утро вечера мудреннее Улыбаюсь
Лешику через 5 часов на работу Улыбаюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines