Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Как создать свой сайт и заработать?" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование с нуля - это совсем просто! 32) Строки. И продолжение ответов
Информационный Канал Subscribe.Ru |
Программирование с нуля - это совсем просто!32) Строки. И продолжение ответовСтроки - это еще один тип данных, так же как целые числа или числа с плавающей запятой. Для обозначения этого типа применяется слово string. var s: string; // объявлена переменная типа string Представляет собой строка последовательность символов, заключенную в кавычки. Символы внутри строки могут использоваться в любой доступной на вашем компьютере кодировке, русской, английской или китайской. С консольными программами русский будет некорректно отображаться, но со следующего занятия к графическому интерфейсу перейдем, там уже с этим не будет проблем.
s := ' это строка! ' ;
Строка может быть пустой, не содержащей ни одного символа:
s := ' ' ; // между кавычками нет пробела! Строки удобны при обработке всевозможной текстовой информации. Например, просмотреть документ, и выделить в нем интересные данные, обработать запись пути к файлу итд.
Строки можно складывать :) Для этого используется символ "+", с его помощью они сцпеляются друг за другом :
s1 := ' Привет ' ;
Определить число символов в строке можно с помощью функции length() :
... Можно вырезать из строки подстроку, в этом поможет функция copy(). Первый ее параметр - препарируемая строка, второй - номер символа, с которого начинается вырезание, и третий - длина вырезаемой подстроки.
... Можно проверить, есть ли в строке подстрока. Для этого надо задействовать функцию Pos(), первый параметр которой - подстрока, а второй - строка, в которой эта подстрока ищется :) Возвращает pos() либо ноль, если подстроки в строке нету, либо номер символа, с которого эта подстрока начинается.
... Также, можно преобразовывать число в строку, а строку - в число (если в строке корректная запись числа). Функция StrToInt(s), где s - значение типа string, возвращает значение типа integer, являющееся числовым представлением записанного в строке значения (или ноль, если эта запись некорректна).
var x: Integer; Функция IntToStr() наоборот превращает число в строковое представление. Здесь ошибок не бывает :)
var s: string; В Бейсике и Си строки заключаются в двойные кавычки, не одинарные. Тип string и в Бейсике есть, и складывать строки в нем тоже можно:
Dim s As String В Си, как и полагается, все посложнее :)
Для того
чтобы курсор возвращался в начало строки надо было добавить
помимо "\n" ещё и "\r". Но дальше возникла более серьезная -
библиотеку atlstr.h он найти не может и пишет
[C++ Error] Unit1.cpp(2): E2209 Unable to open include file atlstr.h
И вот с этим ничего поделать не могу. Пробовал смотреть справку,
но там не очень понятно даны описания, да к тому же на английском,
в общем не помогло. Мне как раз написали про atlstr.h - он только в Visual Studio .NET. В ранних версиях можно вроде как-то так строки использовать:
#include <string>
...
string MoiaStroka; В BorlandC++ я проверял, работает. Соответственно, присваивать строки можно так: MoiaStroka = "привет"; а вот складывать нельзя. Правда, есть обходной маневр - можно прицеплять к текущему значению переменной в хвост в помощью сокращенного оператора присваивания "+=" : MoiaStroka += " тебе!";
Пока со строками все. Мы к ним вернемся чуть попозже. И упражнения по строкам тоже будут, главное, чтобы все (кто делает :) успевали сделать задания и не слишком торопились.
Варианты на фанту (пиво :) и чулки. Готовые алгоритмы.
Здравствуйте вот решил попробовать пояснить решение задачки про фанту! Для начала хочу сказать что задачка не так проста для решения как кажется на первый взгляд. Самое главное найти МИНИМАЛЬНУЮ сумму начальных денег. И еще один ответ про чулки - Андрея же:
Алгоритм Я тоже сторонник именно такого подхода - постараться сделать как можно более универсальный алгоритм (и как можно более простой :), а потом его быстро закодировать, то есть думать за столом, а не за монитором. Как говорил один умный человек, экономьте в программе не пять операторов, а пятьдесят. Можно код вылизывать, а можно - алгоритм. Что дает гораздо больший эффект.
Исходные тексты. Нет, специально с ошибками не выкладываю. Но и не проверяю тоже. Для этого нет времени. Кто хочет, тот, уверен, разберется. Сейчас главное - делать, даже с ошибками. Как тестировать, я рассказывал немного, еще попозже расскажу. Это ко всем обращение! Если какой-то код, прием в нем какой-то понравился, то все же сначала проверьте его на правильность, потестируйте на разных результатах. Публикация кода в рассылке (если код - не мой :) не означает его правильности!
Я думаю что можно сделать набольшое замечание что-ли То есть можно так записать сокращенно (без Var второй раз):
Var X: Integer; Или так, через запятую:
Var X, Y: Integer; Но переменные разных типов надо, конечно, разносить. Ответ про брусок:
{$APPTYPE CONSOLE} То же - на Си++. Команды с cin/cout - это такая еще одна возможность языка по вводу/выводу со стандартных устройств (консоли в частности).
#include<iostream>
void main()
if(((x<=w)&&(y<=h))||((x<=h)&&(y<=w)))
else
if(((x<=w)&&(z<=h))||((x<=h)&&(z<=w)))
cout<<"Prochodit po ploscosty x-z "<<"\n";
else
if(((y<=h)&&(z<=w))||((y<=w)&&(z<=h)))
Далее.
с заданием 7 провозился 3 вечера. Не столько даже с тем как записать (понятно ,что если предмет больше или равен пазу то он не влезет туда ,если равен можно забить конечно ,но будем считать что это не наш случай) а сколько разобраться о каких ошибках мне пишет компилятор. О. Если бы не пример из 24 урока про оператор "else". Пришлось его отдельно рассмотреть, подправить чтоб не мелькал а держался на экране. Причем когда я переписывал его по буквам он не работал, (ошибки чтоб их) а при копировании - как родной. Где ошибка была так и не понял. Можно еще проще - текст из редактора Дельфи сохранять командой Save As... в виде текста. Но я обычно старые проекты просто архивирую и в сторонку... На память :) Вот решения Сергея по квадратному уравнению и про параллелепипед:
#include <conio.h>
Она немного отличается, от заданного алгоритма, но, на мой взгляд,
Сама программа выглядит так: Восьмая задача:
#include <iostream>
using namespace std;
main()
cout << sum;
system("PAUSE"); Очень элегантно и компактно, правда? ОБратите внимание, как переменная i декларируется, прямо внутри цикла! Я лично не сторонник таких вещей, предпочитаю все в одном месте объявлять, чтобы не путаться потом. Но это кто как привык. Варианты на Паскале:
{ex8}
Задание № 8 (совсем легко получилось), ответ 250000: Следующий вариант.
8. Найдите сумму первой тысячи нечетных положительных чисел. Насчет факториала, конечно, многие отметили, что получающееся значение выходит за все мыслимые рамки :) Это связано с тем, что компьютер ведь отводит для каждой переменной (ячейки) ограниченный объем памяти, поэтому слишком длинные или большие числа он не сможет обработать. В Дельфи, например, диапазон допустимых значений для типа Integer такой: от -2147483648 до 2147483647 Для типа Real (в последних версиях Дельфи рекомендуют вместо устаревшего Real указывать Double) - так: от 5.0 x 10^-324 до 1.7 x 10^308 А в Си вообще может быть ужас!!! Если в Паскале к числу максимально допустимому прибавить единичку:
var n: Integer; то в момент выполнения оператора n := n + 1; возникнет естественная ошибка (ошибки, возникающие непосредственно во время работы програмы, называются ОШИБКИ ВРЕМЕНИ ВЫПОЛНЕНИЯ, runtime-ошибки). Так как значение n стало больше максимально допустимого. А вот в Си :
int i; НЕТ! Никаких ошибок в команде i++ выявлено не будет. Знаете, каким будет значение i, равное 2147483647, если его увеличить на единицу? Попробуйте догадаться :) Правильно - "-2147483648" (с минусом), самому малому (или большому?) отрицательному. То есть как бы по кругу замкнутому значения изменяются, сразу за самым большим положительным идет самое большое (малое?) отрицательное. Сделано так прежде всего из соображений эффективности, чтобы каждую арифметическую операцию не проверять на допустимость диапазона значений. Как процитировал подписчик Андрей,
"Язык Си - как нож мясника: прост, остр и исключительно эффективен в
умелых руках. Как и всякое острое орудие, Си может принести увечья
тем, кто не умеет им пользоваться" Так что если Си используете, то смотрите, не порежьтесь :)
Задание 8 (найти сумму певой тысячи нечетных положительных
{$APPTYPE CONSOLE}
var
end.
{$APPTYPE CONSOLE}
var
begin
i:=1; Еще.
я на днях часа 2 разбирался с кодировками и все-таки Кстати - а почему это не у всех получился нормальный ответ с факториалом 69, как у Алексея? Нули какие-то, ошибки? Знаете, почему я взял 69? Потому что на старых программируемых калькуляторах :) для разрядов степени (после буквы E) отводилось только два разряда, и факториал 69 (10 в степени 98) был последним, который вычислялся корректно! Пока все. Как написал один из подписчиков, Перерыв! По этому адскому ящику идет "Осторожно, Задов!", а я его буду смотреть. :)
Свежий анекдот!
Однажды, тот же молодой сисадмин познакомился с веб-дизайнершей. по привычке он сразу же спросил, какой у нее ip-адрес, но услышав, что ip-адрес у нее динамический, тут же потерял к ней всякий интерес. Далее - графический интерфейс, продолжение ответов (решайте-решайте!), сказки. (c) 2004 Сергей Бобровский bobrovsky@russianenterprisesolutions.com
Школа программирования с нуля
Все предыдущие выпуски базового курса тут:
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.prognull |
Отписаться |
В избранное | ||