Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2012, 13:02   #1
Immoralist
Подтвердите свой е-майл
 
Регистрация: 14.04.2012
Сообщений: 38
Вопрос СИ, вопрос по работе цикла...

Задача:
Дана матрица размера M x N. Вывести ее элементы, расположенные в столбцах с нечетными номерами (1, 3, …). Вывод элементов производить по столбцам, условный оператор не использовать.

Программа:
PHP код:
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>

void main()
{
    const 
long m=7n=6;
    
long ija[m][n];
    
srand(time(0));
    
//формирование и вывод матрицы
    
for (i=0i<mi++)
    {
        
printf("\n\n");
        for (
j=0j<nj++) 
           {
            
a[i][j]=25+rand()%56;
            
printf("%d\t",a[i][j]);
           }
    }
    
printf("\n\n");
    
//вывод только элементов нечётных столбцов
    
for (i=0i<mi++)
    {
        
printf("\n\n");
        for (
j=0j<nj
           {
            
printf("%d\t",a[i][j]);
            
j=j+2;
           }
    }
    
printf("\n\n");

Программа работает правильно.

Вопрос вот по этому циклу:
PHP код:
    //вывод только элементов нечётных столбцов
    
for (i=0i<mi++)
    {
        
printf("\n\n");
        for (
j=0j<nj
           {
            
printf("%d\t",a[i][j]);
            
j=j+2;
           }
    } 
Почему он работает КОРРЕКТНО? Ведь сначала должен выводиться 0 элемент 1 строки(который не задавали), затем 2 эл. 1 строки и т.д. В итоге должна получиться матрица из чётных столбцов...Видимо я не правильно понял работу цикла. Объясните....Спасибо.

Последний раз редактировалось Immoralist; 25.04.2012 в 13:05.
Immoralist вне форума Ответить с цитированием
Старый 25.04.2012, 13:09   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Бред какой-то.
зачем таким образом организовывать цикл?
Код:
for (j = 0; j < n; j +=2)
А насчет чета/нечета -- в С-ной записи индексация начинается с 0, но мы-то привыкли считать с единицы... Поэтому 0-й столбец мы называем первым... а первый -- это нечетный, ага?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 25.04.2012, 13:12   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
j=j+2;
А это, что у Вас за безобразие?
Не лучше ли сделать так:

Код:
        for (j=0; j<n; j+=2) 
           {
            printf("%d\t",a[i][j]);
           }
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 25.04.2012, 13:12   #4
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Код:
 for (i=0; i<m; i++)
    {
        printf("\n\n");
        for (j=0; j<n; j) //j не прибавляется =) достаточно просто написать for(j=0;j<n;) 
           {
            printf("%d\t",a[i][j]); //первым выведеться элемент [0][0], затем [0][2] (третья строка) и т.д
            j=j+2; //перескакиваем через строчку что и приводит к выводу только элементов нечетных столбцов
           }
    }
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 25.04.2012, 13:48   #5
Immoralist
Подтвердите свой е-майл
 
Регистрация: 14.04.2012
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
Бред какой-то.
зачем таким образом организовывать цикл?
Код:
for (j = 0; j < n; j +=2)
А насчет чета/нечета -- в С-ной записи индексация начинается с 0, но мы-то привыкли считать с единицы... Поэтому 0-й столбец мы называем первым... а первый -- это нечетный, ага?
Код:
for (j = 0; j < n; j +=2)
На счёт организации цикла согласен. Хотя не понятно, ведь 0+2 будет 2 и в итоге выведется 2 столбец...
Но про индексацию ничё не понял, в квадратных скобках мы пишем индекс(правильно?)И по вашим словам, если записать индекс 1, то на самом деле это будет 0? А если запишем 0, тогда что?
Во всяком случае у меня в 1 цикле нет индекса 0, там всё идёт от единицы, но во 2 цикле, уже встречается индекс 0, хотя в 1 цикле этот элемент(например a[1][0]) мы не задавали...

Последний раз редактировалось Immoralist; 25.04.2012 в 13:56.
Immoralist вне форума Ответить с цитированием
Старый 25.04.2012, 13:56   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Как это не задавали. a[i][j] = a[0][0], a[0][2], a[0][4] и так далее до "n" и "m".
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 25.04.2012, 14:46   #7
Immoralist
Подтвердите свой е-майл
 
Регистрация: 14.04.2012
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Как это не задавали. a[i][j] = a[0][0], a[0][2], a[0][4] и так далее до "n" и "m".
То есть i++ и j++ выполняются только на 2 шаге?
Immoralist вне форума Ответить с цитированием
Старый 25.04.2012, 15:24   #8
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Цитата:
Но про индексацию ничё не понял, в квадратных скобках мы пишем индекс(правильно?)И по вашим словам, если записать индекс 1, то на самом деле это будет 0? А если запишем 0, тогда что?
Пф...
На пальцах.
Смортри на свою руку.
Пять пальцев.
Начиная с большого -- он первый, указательный -- второй, средний -- третий...
Но в С нумерация идет с 0.
То есть, если взять массив пальцев (бред какой-то, согласен...), то большой палец будет иметь индекс 0, а мизинец -- индекс 4:
Код:
string fingers[5] = { "большой", "указательный", "средний", "безымянный", "мизинец" };
// печатаем массив
// сначала не в цикле, для наглядности
cout << fingers[0] << endl;    // большой
cout << fingers[1] << endl;    // указательный
cout << fingers[2] << endl;    // средний
cout << fingers[3] << endl;    // безымянный
cout << fingers[4] << endl;    // мизинец

// теперь то же самое в цикле
for (int i = 0; i < 5; i++)
    cout << fingers[i] << endl;

То есть, большой палец на руке -- первый по счету, в нашем, человеческом, обыденном восприятии.
Но в синтаксисе языка С он имеет индекс 0.
В отличие от того же Паскаля, где индексация идет с 1.
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 25.04.2012, 15:29   #9
Immoralist
Подтвердите свой е-майл
 
Регистрация: 14.04.2012
Сообщений: 38
По умолчанию

Не доходит...)))
for (int i = 0; i < 5; i++) cout << fingers[i] << endl;
тут на 1 шаге выведется fingers[1], я прав?

Последний раз редактировалось Immoralist; 25.04.2012 в 15:31.
Immoralist вне форума Ответить с цитированием
Старый 25.04.2012, 15:46   #10
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Нет =) fingers[0].
параметры цикла for (1-начальное значение(0);условие выхода(i<5,т.е отработает 5 раз, вплоть до 4); оператор изменения счетчика или любое другое выражение,которое будет отрабатывать на каждой итерации цикла)
Т.е первая итерация цила i=0
Вторая итерация цикла i=1 и т.д пока i не станет 5.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Qt] Вопрос о работе с сайтами. CarmaC Qt и кроссплатформенное программирование С/С++ 4 24.07.2011 19:59
Вопрос по работе с Qt CarmaC Общие вопросы C/C++ 3 16.07.2011 13:52
Вопрос по работе со строками. Кнехт Общие вопросы .NET 7 25.11.2010 17:09
Вопрос по работе с МЕМО combays Общие вопросы Delphi 4 15.11.2010 11:38
Вопрос по работе record Halifath Помощь студентам 1 02.01.2010 00:37