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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2010, 12:00   #11
devnir
Пользователь
 
Регистрация: 26.10.2010
Сообщений: 26
По умолчанию

Гром
Цитата:
Локальные переменные и объекты, создаваемые в области свободной памяти не инициализируются по умолчанию. [...]
Собственно я о этом и писал. Сделайте масивы static, или выкинте их за пределы ф-и, и они инициализанутся в "0"... и никаких проблем и вопросов не возникнет....
Да и ни чего я не "гребу под одну гребенку". Просто советую. Пару раз наступить на такой мелкий недачет как "неявно обьявленые переменные" мне хватило... Я думаю Вы понимаете как такие ошибки не легко найти при отладке....
devnir вне форума Ответить с цитированием
Старый 27.10.2010, 12:59   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
но там же могут быть совершенно разные значения
Но по хорошему - по смыслу - там должны быть нули.
Хотя конечно не все компиляторы с этим согласны.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.10.2010, 14:24   #13
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от devnir Посмотреть сообщение
Гром

Собственно я о этом и писал. Сделайте масивы static, или выкинте их за пределы ф-и, и они инициализанутся в "0"... и никаких проблем и вопросов не возникнет....
Да и ни чего я не "гребу под одну гребенку". Просто советую. Пару раз наступить на такой мелкий недачет как "неявно обьявленые переменные" мне хватило... Я думаю Вы понимаете как такие ошибки не легко найти при отладке....
Дело в том, что когда дан массив некоего заданного размера, и вы инициализируете его списком инициализации, в котором элементов меньше, чем размер массива, то оставшиеся элементы массива заполняются нулями. О чём и написано в цитате Страуструпа, которую привёл Гром, об этом же вам скажет стандарт.
Код:
int x[100] = { 0 };
Заполнит весь массив нулями. Можете проверить)
netrino вне форума Ответить с цитированием
Старый 29.10.2010, 16:45   #14
g001501
Пользователь
 
Аватар для g001501
 
Регистрация: 16.09.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Код:
S = S + Array[i]*Vector[i];
Не вектор множится на вектор, а каждый элемент вектора умножается на такой же по счёту элемент другого вектора, и полученное произведение прибавляется к S

АААА... Понятно... И где это я мозги потеряла.. Никто не находил?

Цитата:
Сообщение от Гром Посмотреть сообщение
Какие еще перемножения массива и вектора? Что вы называете массивом, а что - вектором? У вас перемножаются элементы массива. Если геометрически - скалярно умножаются два вектора. И не важно, как вы назвали переменные.
Вообще я вас в упор не понимаю - вы удивляетесь, почему переменная типа float является числом, а не массивом???
Я уже поняла! Netrino мне все доступно объяснил!

Цитата:
Сообщение от Stilet Посмотреть сообщение
и? Дальше что? Компилятор какой?

Странный вопрос? А почему не 6? Перемножь руками и увидишь. Неинициализированные элементы считай нулями.
У меня компилятор был нормальный. Но в последнее время он окно выполнения программы сворачивает в трей и его можно только принудительно развернуть, нажав: Развернуть.

Уважаемые форумчане!

У меня есть два задания: определить результат выполнения программы.

Код:
#include<stdio.h>
void main()
{
	int i = 1;
printf("%d\n",(!!(!(!0-1)-1)) * (!(3 << 5) < i ));
}
Я не знаю, что обозначает знак "<<".

Код:
#include<stdio.h>
void main()
{
	printf("%d\n",(5 & 1)^(!(3 > 5)));
}
а тут я не знаю, что обозначает знак "^". Я думала, что это значит число в степени. Однако, тут такое определение не подходит.

Последний раз редактировалось Stilet; 29.10.2010 в 17:06.
g001501 вне форума Ответить с цитированием
Старый 29.10.2010, 17:08   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Я не знаю, что обозначает знак "<<".
Это бинарный сдвиг аналог SHL (читай про него что он делает в учебниках)
Цитата:
что обозначает знак "^"
Это аналог XOR - булевое исключающее ИЛИ (Тоже в учебники полезь.)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.10.2010, 17:08   #16
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

<< в данном случае сдвиг влево. Т.е если было 3=11(в двоичной системе)
тогда 3<<5=1100000(в двоичной системе)=96(в десятичной)
^ это поразрядное исключающее ИЛИ
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 29.10.2010, 17:13   #17
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Знак << обозначает поразрядный сдвиг числа в битовом представлении. Пример:
Число 6 (в десятичной) = 00000110 (в двоичной)
6 << 1 = 00000110 << 1 = 00001100 = 12
6 << 2 = 00000110 << 2 = 00011000 = 24
6 << 3 = 00000110 << 3 = 00110000 = 48
и т.д.
Т.е. биты числа сдвигаются на указанное число позиций влево (фактически умножаются на 2 в указанной степени).

Знак ^ означает битовое же исключающее ИЛИ.
Т.е.
Код:
 X | Y | X^Y
---+---+-----
 0 | 0 | 0
 0 | 1 | 1
 1 | 0 | 1
 1 | 1 | 0
Для чисел, скажем, восьмибитных, это будет:
Код:
01100101
^
11101001
--------
10001100
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 03.11.2010, 20:09   #18
g001501
Пользователь
 
Аватар для g001501
 
Регистрация: 16.09.2010
Сообщений: 28
По умолчанию

Есть такая задача:

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

И ее решение:

Код:
#include <stdio.h>
#include <conio.h>
void main()
{
        float a[100][100], t, max;
        int m, n, i, j, p;
        printf("Vvedite razmer matricy (MxN): ") ;
        scanf("%d%d", &m, &n);
        for (i = 0; i < m; i++)
                for (j = 0; j < n; j++)
                        {
                                printf("Vvedite jelement massiva a[%d, %d]: ", i + 1, j + 1);
                                scanf("%f", &a[i][j]);
                        }
        printf("\nRazmer matricy: %dx%d\n", m, n);
        printf("\nIshodnaja matrica\n" );
        for (i = 0; i < m; i++)
                {
                        for (j = 0; j < n; j++) printf("%g ", a[i][j]);
                        printf("\n" );
                }
        for (j = 0; j < m - 1; j+=2)
                {
                        for (i = 0; i < n; i++)
                                {
                                        t = a[i][j];
                                        a[i][j] = a[i][j + 1];
                                        a[i][j + 1] = t;
                                }
                }
        for (i = 0; i < n - 1; i++)
                {
                        max = a[0][i];
                        p = i;
                        for (j = i + 1; j < m; j++)
                                if (a[0][j] > max) { max = a[0][j]; p = j; }
                        t = a[0][i];
                        a[0][i] = a[0][p];
                        a[0][p] = t;
                }
        printf("\nRezul'tat\n") ;
        for (i = 0; i < m; i++)
                {
                        for (j = 0; j < n; j++) printf("%g ", a[i][j]);
                        printf("\n") ;
                }
        getch();
   }
Кто-нибудь может объяснить, как поменяли местами четные и нечетные столбцы и принцип сортировки первой строки во возрастанию? Заранее спасибо.
g001501 вне форума Ответить с цитированием
Старый 03.11.2010, 20:46   #19
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

Гром, а точно не
a b a^b
0 0 0
1 0 1
0 1 1
1 1 1

??
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Старый 03.11.2010, 21:16   #20
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

kaljan775, точно. Это же исключающее ИЛИ, а не простое. Оно же, можно считать, побитовое "не равно".
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен результат программы... Катюшенька Помощь студентам 1 17.05.2010 09:53
Определить результат выполнения программы. Joker<777> Паскаль, Turbo Pascal, PascalABC.NET 2 23.04.2010 02:15
Как сделать, чтобы результат выполнения макроса записывался по строкам во всем столбце? kipish_lp Microsoft Office Excel 3 26.11.2009 07:18
Появляется окошко и тут же пропадает, как посмотреть результат выполнения си кода? Urukhay4 Общие вопросы C/C++ 11 18.04.2009 17:37
как отобразить в dbgrid результат выполнения commandText двух adodataset? Гузель БД в Delphi 2 13.08.2008 16:17