Вернуться   Развлекательный портал CN.ru - Форум > Технологии > Программирование > Начинающим

Ответ
 
Опции темы
Старый 22.04.2007, 10:05 ↑ #31
dkanus Мужской
cтарейшина эго-форума
 
Регистрация: 28.01.2007
Сообщений: 761
dkanus отключил(а) отображение уровня репутации
По умолчанию Re: Уроки программирования на C++ для начинающих

Если кто-то начал изучать C++ то предпологается, что он научился компилить на турборях. Реалии таковы, что очень мало народу идут сразу на C++.
dkanus вне форума   Ответить с цитированием
Старый 22.04.2007, 13:05 ↑ #32
Senoval Мужской
завсегдатай эго-форума
 
Регистрация: 04.03.2006
Адрес: Net#181
Возраст: 33
Сообщений: 243
Репутация: 0
Senoval молчание-золото
Отправить сообщение для Senoval с помощью ICQ
По умолчанию Re: Уроки программирования на C++ для начинающих

DKanus, это здОрово, что ты создал такую тему... Я вот ваще в "Сишке" мало что рублю... В свое время проканывал лекции и лабы... короче, них.. не делал... )) так что ты пиши свои уроки... я буду изучать С/С++, да и, думаю, многим будет полезно...
P.S. ДА, кстати, мне понравилось изложение информации на первых уроках... продолжай в том же духе...
Senoval вне форума   Ответить с цитированием
Старый 22.04.2007, 14:15 ↑ #33
dkanus Мужской
cтарейшина эго-форума
 
Регистрация: 28.01.2007
Сообщений: 761
dkanus отключил(а) отображение уровня репутации
Exclamation Re: Уроки программирования на C++ для начинающих

Урок четвёртый - ветвление програмы и булевы переменные
До этого наши программы имели линейную структуру, т.е. всегда выполнялось каждое действие, независимо ни от чего. Сегодня мы рассмотрим возможности ветвления хода программы. Разберём такой пример - нам нужно найти действительные корни квадратного трёхчлена. Случаи, когда D > 0 и D = 0 мы ещё можем объединить в один, так как, по сути, корня два, но вот для D < 0 действительных корней нет и нам нужно отработать ситуацию отдельно. Сделаем так:
Код:
#include <math.h> //  В этом файле определены различные
                          // математические функции, мы рассмотрим их поздней
                          // пока же мы используем только функцию для
                          // вычисления квадратного корня - sqrt
#include <stdio.h>
#include <conio.h>
void main()
{float a, b, c, D; // Объявим и введём переменные
	puts("Enter a:");
	scanf("%e", &a);
	puts("Enter b:");
	scanf("%e", &b);
	puts("Enter c:");
	scanf("%e", &c);
	D = b*b - 4*a*c;
	if(D >= 0) // Внутри конструкции if помещаем условие и если оно
        **// верно, то выполняется кусок кода заключённый в фигурные
          //скобки
	printf("D = %f\nx1 = %f\nx2 = %f\n", D, (-b+sqrt(D))/(2*a), 
        (-b-sqrt(D))/(2*a));
        }
	else // Это необязательный блок, который будет выполнен, если
              // условие не соблюдено
		puts("D < 0"); // Как видим, если необходимо выполнить лишь
                                    // одну операцию, скобки можно опустить
	getch();
}
В конструкции if мы использовали условие - ">=", существует ещё - "<=", а также знаки строгого неравенства ">" и "<". Если необходимо проверить равенство двух чисел можно использовать "==", а знак "!=" даст положительный результат, если числа не равны.
Задание 1 - модифицировать программу так, чтобы она отдельно рассматривала случай, когда D = 0.
По сути операции условия возвращают логическое значение (true/false) и его можно сохранить в переменной типа bool, и использовать в дальнейшем например так
Код:
#include <stdio.h>
#include <conio.h>
void main()
{int a;
	scanf("%d", &a);
	bool b = (a == 0);
	if(b)
		puts("Zero!");
	else
		puts("Something new...");
	getch();
}
Также существует несколько булевых операций, помогающих расширить возможности if.
1) (bool&&bool) - возвращает true если оба значения true, иначе false
2) (bool||bool) - возвращает true если хотя бы одно значение true, иначе false
3)(!bool) - меняет значение на противоположное, true->false, а false->true

if может принимать и значения других переменных. 0 будет считаться false, а всё остальное true
Код:
(true&&true) = true
(true&&false) = false
(false&&false) = false
(true||true) = true
(true||false) = true
(false||false) = true
!true = false
!false = true

if((1==2)||(5!=6))
**
...
// Этот код будет выполняться
...
}
if(!(1==1))
**...
// А этот нет
...
}
Задание 2 - напишите тест с подсчетом балов

Последний раз редактировалось dkanus; 24.04.2007 в 17:31.
dkanus вне форума   Ответить с цитированием
Старый 23.04.2007, 21:21 ↑ #34
Hogofogo Мужской
завсегдатай эго-форума
 
Аватар для Hogofogo
 
Регистрация: 26.06.2006
Адрес: #161
Возраст: 55
Сообщений: 348
Репутация: 217
Hogofogo слава не за горами Hogofogo слава не за горами Hogofogo слава не за горами
По умолчанию Re: Уроки программирования на C++ для начинающих

Цитата:
А то мы щас тут так все зафлудим, что уроков днем с огнем не найдешь
Предлагаю собственно уроки помещать в "хомяка" на народе.ру или в другое подобное место, а тут только задавать вопросы и приводить ответы.
Если автор ещё не раздумал...
__________________

Дышите думайте глубже, вы взволнованы умны.
Hogofogo вне форума   Ответить с цитированием
Старый 23.04.2007, 21:26 ↑ #35
dkanus Мужской
cтарейшина эго-форума
 
Регистрация: 28.01.2007
Сообщений: 761
dkanus отключил(а) отображение уровня репутации
По умолчанию Re: Уроки программирования на C++ для начинающих

Нет, нераздумал. Просто думаю что следующей темой дать + не каждый день есть время написать нормальный урок
dkanus вне форума   Ответить с цитированием
Старый 23.04.2007, 21:28 ↑ #36
Hogofogo Мужской
завсегдатай эго-форума
 
Аватар для Hogofogo
 
Регистрация: 26.06.2006
Адрес: #161
Возраст: 55
Сообщений: 348
Репутация: 217
Hogofogo слава не за горами Hogofogo слава не за горами Hogofogo слава не за горами
По умолчанию Re: Уроки программирования на C++ для начинающих

А как насчёт того, чтобы завести сайт для уроков на бесплатном хостинге?

Пардон, это уже к личной переписке больше подходит...
__________________

Дышите думайте глубже, вы взволнованы умны.
Hogofogo вне форума   Ответить с цитированием
Старый 23.04.2007, 21:42 ↑ #37
dkanus Мужской
cтарейшина эго-форума
 
Регистрация: 28.01.2007
Сообщений: 761
dkanus отключил(а) отображение уровня репутации
По умолчанию Re: Уроки программирования на C++ для начинающих

Почему личная переписка? Это по теме уроков.
Накладно по времени его создавать, а мне сейчас поступать... К тому же я пока созданием сайтов не занимался. Только что позже, ну и разумеется чтобы все желающие могли уроки вести, а то жирно мне целый сайт.
dkanus вне форума   Ответить с цитированием
Старый 23.04.2007, 22:43 ↑ #38
Abel Nightroad Мужской
реликт эго-форума
 
Аватар для Abel Nightroad
 
Регистрация: 09.02.2005
Адрес: 207 нанка
Возраст: 32
Сообщений: 3,129
Репутация: 358
Abel Nightroad за словом в карман не полезет Abel Nightroad за словом в карман не полезет Abel Nightroad за словом в карман не полезет Abel Nightroad за словом в карман не полезет
Отправить сообщение для Abel Nightroad с помощью ICQ
По умолчанию Re: Уроки программирования на C++ для начинающих

ИМХО пусть будут уроки в форуме.
А все "левые" посты я могу удалить по просьбе автора темы)
__________________
Человекообразный примат по программному обеспечению
Abel Nightroad вне форума   Ответить с цитированием
Старый 24.04.2007, 17:30 ↑ #39
dkanus Мужской
cтарейшина эго-форума
 
Регистрация: 28.01.2007
Сообщений: 761
dkanus отключил(а) отображение уровня репутации
Exclamation Re: Уроки программирования на C++ для начинающих

Урок пятый - забытый switch + цикл своими руками
Вначале я хотел бы рассказать о таком спорном элементе как метки. Спорном, потому как спорят касательно целесообразности их применения, но об этом можно почитать отдельно (возможно как-нибудь напишу статью в соседнем разделе), а сейчас главное научиться с ними работать.
Итак, меткой можно отметить определенное место в тексте програмы, на которое впоследствии можно будет перейти с помощью оператора goto. Например эта програма никогда не кончится (готовтесь закрывать вручную):
Код:
#include <stdio.h>
void main()**
 here: // Отметили место
 puts("I'm here");
 goto here; // Т.к. команда перехода выполняется без условия (т.е.
                //всегда) мы будем вечно возвращаться...
}
Теперь попробуем добавить условие, например так:
Код:
#include <stdio.h>
#include <conio.h>
void main()**
short n, i = 1;
unsigned long fact = 1;
printf("Enter n: ");
scanf("%d", &n);
//////////////////
some_label:
fact = fact * i;
i = i + 1;
if(i <= n) goto some_label;
//////////////////
printf("n! = %d\n", fact);
getch();
}
Итак, эта программа вычисляет факториал введенного числа. Я выдеделил кусок кода представляющий для нас интерес. По сути это цикл. Строка "i = i + 1;" увеличивает i на единицу, а "if(i <= n) goto some_label;" кидает нас обратно к метке, если только i не больше чем n. Т.е. этот код повторяется n раз и каждый раз i всё больше, что мы и используем для вычисления факториала. Ведь если i пробегает путь от 1 до n, то нам нужно только перемножить все i, что мы и делаем. Роль циклов в программировании невозможно переоценить, они используются повсемесно. На следующем уроке мы рассмотрим готовые циклические конструкции.
Задание 1 - вывести на экран числа от 1 до n, где n - введённое пользователем число.

Теперь о switch. Это ещё один способ ветвления основанный на метках. Но работает он иначе.
Код:
...
int n;
...// здесь n стало чему-то равно
switch(n) // Передаём её switch
**
case 1: // если она равна 1, то перейдём сюда
puts("one");
case 2: // сюда если равна дву или единице, т.к. ничто не останавливает
           //програму идти дальше
puts("two");
break; // А вот после этой инструкции програма закончит выполнение
         //блока switch
case 3: // И это выполнится только при тройке
puts("three");
default: // А это будет выполнено если не подошли другие метки
           //(указывать необязательно) и при тройке, ибо мы не указали
           //break
puts("To big");
}
...
Задание 2 - модифицируйте программу так, чтобы всегда выводилась только одна строка и чтобы она различала 5 чисел.
dkanus вне форума   Ответить с цитированием
Старый 24.04.2007, 19:47 ↑ #40
McKuzmich
старожил эго-форума
 
Регистрация: 11.01.2007
Возраст: 32
Сообщений: 689
Репутация: 5986
McKuzmich захватил ЭГО-Форум McKuzmich захватил ЭГО-Форум McKuzmich захватил ЭГО-Форум McKuzmich захватил ЭГО-Форум McKuzmich захватил ЭГО-Форум McKuzmich захватил ЭГО-Форум McKuzmich захватил ЭГО-Форум McKuzmich захватил ЭГО-Форум McKuzmich захватил ЭГО-Форум McKuzmich захватил ЭГО-Форум McKuzmich захватил ЭГО-Форум
По умолчанию Re: Уроки программирования на C++ для начинающих

switch и goto разные вещи... goto умер или точнее убит уже давно, он запутывает текст. switch - хорошо, логическое продолжение if'ов.
McKuzmich вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Текущее время: 16:34. Часовой пояс GMT +6.
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot

ВКонтактeTwitterFacebook
Хотите связаться с нами? Напишите письмо, и мы обязательно ответим.