Обсуждение:Программирование на языке Си/§7
Добавить темуjust-a-guest написал:
Мне кажется или задача №2 не совсем корректно составлена? Не рискну ее редактировать, может я чего не понимаю, но вроде бы здесь
- define N 10
void main()
{
int mat[N][N], n, yd=1,i,j,sum,sumt;
/*где n - размерность матрицы
yd - идентификатор, если 1 матрица "магическая", иначе нет.
sum - сумма элементов главной диагонали
sumt - сумма элементов строки, столбца, второй диагонали
- /
puts ("введите размерность квадратной матрицы\n");
scanf("%i",&n);
puts ("введите матрицу по строчно");
for(i=0;i<n;i++)
{
printf("%i строка\n",i+1);
for(j=0;j<n;j++)
scanf("%i",&mat[i][j]);
}
BANG! Размерность матрицы константа (10), а я ввожу скажем 15 на соответствующий вопрос. И здесь
for(j=0;j<n;j++)
scanf("%i",&mat[i][j]);
как только j==11, программа вылетает с ошибкой записи в несуществующую часть массива.
P.S.
Кстати, а как в самом деле инициализовать массив, размер которого заранее неизвестен? Т.е. не константа?
just-a-guest написал: Посещаемость жжет! Мне так и ответили ) Собственно по теме:
а как в самом деле инициализовать массив, размер которого заранее неизвестен?
Называеться динамический массив, инициализуеться так:
int str = 100;
char *mas = new char [str];
Создали указатель на массив символов (mas) размером "str". Дальше по мере надобности меняем этот размер на любое, нужное число (конечно в пределах разумного).
P.S. Тут странно сделано обсуждение -- вместо добавления новых записей можно редактировать все. Поэтому большая ко всем просьба: пожалуйста, пишите свои ники, при добавлении сообщений.
- Для подписи используется четыре слэша и имеем: --S.J. 21:14, 25 января 2011 (UTC)
- По вопросу - да вылетает. Вот видите все сами нашли :) А вообще Си - это прошлый век, рекомендую С# --S.J. 21:17, 25 января 2011 (UTC)
- P.S. Почему бы вам не зарегистрироваться .. сможете работать через ник, а не через IP. --S.J. 21:18, 25 января 2011 (UTC)
P.S. Почему бы вам не зарегистрироваться .. сможете работать через ник, а не через IP.
- Зачем? ) 95.153.178.69 22:57, 25 января 2011 (UTC)just-a-guest
* А вообще Си - это прошлый век, рекомендую С#
- С может быть, а вот С++ нет. В принципе у меня в визуал студии он тоже есть (кстати, как произноситься С# ?), но не вижу разницы.
- Имхо, есть:
- 1. Ассемблер.
- 2. С/С++/С#, Pascal (читайте Delphi), Java.
- 3. Все остальные.
- Кроме асма все отличаются только синтаксисом. И поскольку С++ сейчас самый распространеный -- на него делают лучшие компиляторы.
- <a few offtop>Кстати на тему выбора языка пара ссылок 1. и 2. :) Прям не поленился найти. Где-то тема была на одной странице, но видимо удалили.</a few offtop> 95.153.178.69 23:18, 25 января 2011 (UTC)just-a-guest
- Конечно, если будите писать что-то низкоуровневое С++ надо знать, но если что-то с интерфейсом пользователя и крупное - сразу почувствуете разницу, я уже не говорю о том, что дебагер и редактор C# крайне удобен (и не встречал ни в одном другом языке). Лишь некоторые различия - система событий, не нужны .h файлы, + более строгий подход к ООП. --S.J. 09:31, 26 января 2011 (UTC)
- Да, насчет интерфейса пользователя вы верно подметили. В свое время, по некоторым причинам так и не доучил Delphi. Теперь(аж только после армии:( ) взялся за голову, но перешел на С++(перешел потому, что наиболее популярный язык для работодателей, (ну еще 1С-бухгалтерия :) ) и проще уместить тоже кол-во кода на меньшем пространстве(например вместо "begin...end" просто "{...}")). И оказался в шоке -- где же столь часто мной применяемые мною формочки, кнопочки, едиточки (это не имя ) )? Как же программировать? Сейчас стало ясно: нечего ставить себе всякие Визуал Студии. У меня от Microsofta и так винда стоит -- мало что-ли? У того же Borland'a в С++ очень много всяких компонентов(Хотя как-то видел видео со Студией на заднем плане, с компонентами, но в чем соль, так и не понял -- нет их там). Т.е. это от языка не зависит -- от IDE.
- Насчет отсутствия .h файлов -- да, это просто великолепно, ставлю плюс С# (я и так работаю в двух -- мне не жалко ) ).
- По поводу ООП (О_о что это?!!) Если серьезно я до него еще толком не дошел.
- Дебаггер у меня, в визуал студии крайне бестолковый (и на все языки, я так понимаю там должен быть один) Лучше использовать что-то стороннее -- к примеру OllyDbg). Но вообще при разработке приложений, пока еще ни разу не сталкивался с необходимостью им пользоваться -- может от того, что не писал пока ничего серьезного? Обычно он применяеться с иными намерениями ;)
Конечно, если будите писать что-то низкоуровневое С++ надо знать
- Я не представляю -- как возможно писать что-то низкоуровневое?! Нет -- я не спорю, люди делают -- видели такую вещь, как .kkrieger? Весит всего 98Кб. Как туда все это можно было запихнуть (сделано на С++, с ассемблерными вставками), я не представляю, если скомпилированный, ничего не делающий проект весит 6(!)Кб? 95.153.167.26 14:49, 26 января 2011 (UTC)just-a-guest
- О! не писал пока ничего серьезного?+ По поводу ООП (О_о что это?!!) Если серьезно я до него еще толком не дошел. - как только дойдете, и начнете писать - вспомните что я вам советовал :) А брать все сторонние замучаетесь (+ еще про базы данных надо вспомнить), в Студии + С# все в куче и идеально (а проходили мы многое :) ) --S.J. 15:15, 26 января 2011 (UTC)
- Низкоуровневое - это в смысле драйверы, компиляторы и т.п., где ООП вредно и незя. --S.J. 15:18, 26 января 2011 (UTC)
- Ладно, уговорили: обязательно гляну Си Шарп. Но в любом случае сейчас уже надо добивать Си Плюс-Плюс, иначе смысла учить нет. Никто ведь не запрещает быть полиглотом, хм? ) Судя по похожим названиям, я так полагаю, у них синтаксис не сильно различаеться -- просто надо под особенности подстроиться.
- Кстати насчет С++ : а вы не в курсе случайно -- почему такая ситуация: написал
double dbl = 0;
dbl = dbl + 2;
Подчеркивается красной линией знак присваивания, с надписью " Error: no operator "=" matches thеsе operands"?
- P.S. Написал тоже самое в С# - надо же: никаких ошибок! :(
- P.P.S. Сделал выше упомянутую операцию, и аж обзавидовался -- редактор сам выводит варианты того, что дальше писать! Да-а... Я вас понимаю. Собственно эта та причина по которой я хочу снести Студию и поставить Борланд С++ -- там тоже самое.
- P.P.P.S. Для чего я этого до сих пор не сделал (особенно начинающим не рекомендую делать) -- пока еще лучше все вводить как во времена Истинно Больших Машин IBM -- вручную (до перфокарт все же доходить не стоит -- займет поболя времени, да и перемкнуть чего не то может при попытке запихать куда-то в район ПЗУ. Особенно не приятно осознавать, что что-то однозначно происходит, ведь ОС вывела сообщение о наличии нового девайса и отсутвии дров на него. Неприятно в основном по причине перфокарты в левой руке, уведеной далеко в сторону от компьютера и присутствия правой руки где-то в недрах системного блока. Хотя я могу быть и не прав -- это личное мнение: ведь, в принципе это гарантирует лучшее понимание аппаратной части ПК ) ). Для лучшего усвоения материала. А позже, для работы можно и чего попроще взять. (Включая и С#) ) 95.153.182.76 22:01, 26 января 2011 (UTC)just-a-guest
Кстати (я только сейчас вспомнил название символа) для подписи используються 4-ре тильды. А слэш это "/". 95.153.164.19 23:56, 26 января 2011 (UTC)just-a-guest
- Не знаю, у меня в С++ все нормально проходит эта элементарная конструкция. Точно тильда, я напутал ;) --S.J. 01:12, 27 января 2011 (UTC)
- Борланд думаю уступает, в C# там еще можно легко перейти к объявлению метода/свойства, находить все места где используется переменная или где вызов метода, делать мелкие рефакторинги типа переименновать свойство и автоматически заменит во всех местах и т.п. --S.J. 01:16, 27 января 2011 (UTC)
- А дебагер уникален тем, что можно прямо под дебагером продолжать программировать, удобно когда нужно написать сложные места или подправить что-то, зная значения переменных при выполнении. --S.J. 01:17, 27 января 2011 (UTC)
- Точно, точно, извиняюсь моя вина. Ввел в заблуждение и себя и вас еще спросил. Писал только ту часть кода где, как я подумал ошибка. Собственно:
double dbl = 0;
std::cout <<" Double is equal " << (dbl = dbl + 2);
Ошибка, что не поставил скобки.
- Прошу простить: к сожалению (или к счастью?) надо на работу (небольшой "отпуск" закончился) -- ближайшие дней 5 обещаю в обсуждении не учавствовать (в смысле ввиду отсутствия компьютера в рейсе). Это я, пишу, что-б без обид насчет "неотвечания" на топики.
- P.S. Как здесь скрытый текст писать -- <spoiler> не работает? Просто код в него намного лучше вставлять. В обсуждении потом проще разобраться. 95.153.163.34 18:21, 27 января 2011 (UTC)just-a-guest
Господа, а каким образом выделяется память под динамический массив? Например, если я в процессе выполнения программы переопределяю переменную, задающую размерность, массив новой размерности займёт совершенно другую область памяти, или совпадающие по существующим номерам ячейки массива будут лежать в тех же ячейках памяти? Массив занимает память всё время работы программы? Если так, то как освободить занимаемую им память после того, как он стал ненужен? Fingertouch 08:35, 24 октября 2011 (UTC)