2- 0_Алгоритмические языки
.rtf
АЛГОРИТМИЧЕСКИЕ ЯЗЫКИ И
ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ - 1
Контрольная работа 2
Разобраться, что делает каждая программа и сделать описание.
Задание 1.
int strlen1(char *str)
{
int i=0; // объявление и инициализация переменной <i>
while(*str++) i++; //for(i=0; *str; str++) i++; // цикл – пока символ не нулевой, увеличиваем <i>
return i; // возврвщаем значение переменной <i>
}
Данная программа считает количество символов в строке, кроме нулевого.
Задание 2.
int SizeWord(char *express)
{
int size=0; // объявление и инициализация переменной <size>
while(*express==' ') express++; // пропускаем пробелы в начале строки
while(*express) // цикл по условию - код символа не равен нулю
{
if(*express==' ') // условие - если символ строки пробел, то
{
size++; // увеличиваем значение переменной <size>,
while(*express==' ') express++; // пропускаем следующие пробелы и
} // увеличиваем значение указателя на строку
else
express++; // иначе увеличиваем значение указателя на строку
}
return size; //error! // возвращаем значение переменной <size>
}
Данная программа считает количество слов в строке.
Ошибка заключается в том, что если в конце строки нет пробелов, функция вернет значение на единицу меньше.
Задание 3.
int strcmp1(char *str1, char *str2)
{
while(*str1) // цикл по условию - код символа не равен нулю
{
if(*str1++!=*str2++) return 0; // условие - если символ 1-й строки не равен символу 2-й строки,
} // то завершить выполнение функции и возвратить значение <0>
return 1; // возврат значения <1>
}
Сравнение 2-х строк. Если строки разные возвращается значение <0> иначе <1>.
Примечание: если начальные символы строк совпадают, но 2-я строка длиннее, то функция возвращает значение <1>
Задание 4.
int strcmp2(char *str1, char *str2)
{
while(1) // бесконечный цикл
{ //
if(*str1>*str2) return 1; // если данное условие выполняется возвращаем значение <1>
else //
if(*str1<*str2) return -1; // если данное условие выполняется возвращаем значение <-1>
else //
if(!*str1) return 0; // если символ 1-й строки равен нулю, возвращаем значение <0>
str1++; // увеличиваем указатель на первую строку
str2++; // увеличиваем указатель на вторую строку
}
}
Проверка двух строк.
Если первая строка "больше" возвращается значение <1>, если "меньше" возвращается значение
<-1>,если строки равны возвращается значение <0>.
Задание 5.
void Razdvig(char ptr[],int size)
{
int i; // объявление переменных
int len; //
len=strlen(ptr); // получение длинны строки
for(i=len; i>=0; i--) ptr[i+size]=ptr[i]; // цикл - сдвигаем строку вправо
for(i=0; i<size; i++) ptr[i]=' '; // заменяем символы пробелами
}
Данная программа сдвигает символьный массив(строку) вправо на величину <size>.
Задание 6.
void Sdvig(char ptr[])
{
int i; // объявляем переменную
int len=strlen(ptr); // получаем длину строки
for(i=0; i<len; i++) ptr[i]=ptr[i+1]; // цикл - сдвигаем строку влево
}
Процедура сдвигает строку влево на единицу.
Задание 7.
int ReplaceTab(char *str,int size)
{
int i; // объявление переменной
int len=strlen(str); // получаем длину строки и инициализируем <len>
for(i=0; i<len; i++) // цикл от начала до конца строки
{ //
if(str[i]=='\t') // условие - если символ является символом табуляции то
{ //
Sdvig(&str[i]); // вызываем процедуру <Sdvig> и передаем ей адрес символа табуляции
Razdvig(&str[i],size); // вызываем процедуру <ReplaceTab>
len+=size; // прибавляем к <len> величину сдвига
i+=size; // прибавляем к <i> величину сдвига
} //
} //
return len; // возвращаем значение <len>
}
Данная программа заменяет символы табуляции пробелами.
Задание 8.
char *ch;
int match(char *tst)
{
char *chp=ch; // объявляем и инициализируем строку <chp>
while(*tst) // цикл - пока код символа не равен нулю
{ //
if(*tst++!=*chp++) return 0; // условие - если символы не равны, возвращаем <0>
} //
ch=chp; // присваиваем строке <ch> строку <chp>
return 1; // возвращаем значение <1>
}
Данная программа удаляет из строки <ch> строку <tst>, при условии, что строка <ch> содержит в начале строку <tst>. В случае успешного выполнения процедура возвращает значение <1>, иначе значение <0>.
Задание 9.
int CharToInt(char *num)
{
int rez=0; // инициализация переменной <rez>
while(1) // бесконечный цикл
{ //
if(*num<'0' || *num>'9') return rez; // если символ не цифра, возвращаем <rez>
rez+=*num-'0'; // иначе, прибавляем к <rez> значение цифры
num++; // увеличиваем указатель
}
}
Данная программа суммирует цифры в строке до первого не цифрового символа.