Главная » Статьи » Програмування » C [ Добавить статью ]

RUS Уроки по программированию на языке С (Примеры задач на новый материал.)

Примеры задач на новый материал.

В данном разделе урока, мы приготовили для Вас несколько интуитивно понятных примеров c использованием указателей.

Программа для замены в слове X всех букв "a" на сочетание "ky".

#include <string.h>
#include <stdio.h>
void main ()
{
 /* 
 k - переменная для прохода по оригинальному массиву
 i - переменная для прохода по результативному массиву
 n - длина оригинального массива
 */
 int k=0,i=0, n;
 /* 
 x1 - оригинальный массив
 x2 - результативный массив (больше в два раза, на 
 случай, если оригинальный весь заполнен буквами 'a')
 px1 - указатель для перемещения по оригинальному массиву
 px2 - указатель для перемещения по результативному массиву
 */
 char x1[40],x2[80],*px1,*px2;

 // Запрос на ввод оригинального массива
 puts( "Enter word (max 39 letters) ");
 gets(x1);

 /*
 записываем адреса начала 
 оригинального и результативного 
 массивов в указатели
 */
 px1 = x1;
 px2 = x2;

 /* 
 вычисляем рельную длину
 оригинального массива
 */
 n = strlen(x1)+1;

 // цикл поэлементно перебирает
 // оригинальный массив
 while (k<n)
 {
 // если значение текущего элемента
 // не совпадает с 'a'
 if (*(px1+k)!='a')
 {
 // копируем текущий элемент
 // в результативный массив
 *(px2+i) = *(px1+k);
 // переходим к следующим элементам
 i++;
 k++;
 }
 // если значение текущего элемента
 // совпадает с 'a'
 else
 {
 // записываем символ 'k' в текущую
 // позицию результативного массива
 *(px2+i) = 'k';
 // записываем символ 'y' в следующую
 // позицию результативного массива
 *(px2+i+1) = 'y';
 // переходим к следующему элементу
 // оригинального массива
 k++;
 // "перепрыгиваем" через один элемент
 // результативного массива
 i += 2;
 }
 }
 // демонстрируем результативный массив 
 puts(x2);
}

Программa для замены всех сочетаний "ky" в слове X на букву "a".

#include <string.h>
#include <stdio.h>
void main ()
{
 /* 
 k - переменная для прохода по оригинальному массиву
 i - переменная для прохода по результативному массиву
 n - длина оригинального массива
 */
 int k=0,i=0, n;
 /* 
 x1 - оригинальный массив
 x2 - результативный массив
 px1 - указатель для перемещения по оригинальному массиву
 px2 - указатель для перемещения по результативному массиву
 */
 char x1[40],x2[40],*px1,*px2;

 // Запрос на ввод оригинального массива
 puts( "Enter word (max 39 letters) ");
 gets(x1);

 /*
 записываем адреса начала 
 оригинального и результативного 
 массивов в указатели
 */
 px1 = x1;
 px2 = x2;

 /* 
 вычисляем рельную длину
 оригинального массива
 */
 n = strlen(x1)+1;

 // цикл поэлементно перебирает
 // оригинальный массив
 while (k<n)
 {
 // проверяем, если два символа 
 // в текущей позиции оригинального
 // массива не совпадают с буквосочетанием "ky"
 if (strncmp((px1+k),"ky",2)!=0)
 {
 // просто копируем один символ
 // из текущей позиции в
 // результативный массив и 
 // передвигаемся на символ вперед
 *(px2+i++) = *(px1+k++);
 }
 // если же два символа
 // в текущей позиции оригинального
 // массива совпадают с буквосочетанием "ky"
 else
 {
 // записываем в результативный массив
 // символ 'a', и переходим на один 
 // символ вперед. В оригинальном переходим
 // на два символа вперед
 *(px2+i++) = 'a';
 k += 2;
 }
 }
 // демонстрируем результативный массив
 puts(x2);
}

Программa, удваивающая каждую букву слова Х.

#include <string.h>
#include <stdio.h>
void main ()
{ 
 // n - длина оригинального массива *2 
 int n;

 /* 
 x1 - оригинальный массив
 x2 - результативный массив (больше в два раза)
 px1 - указатель для перемещения по оригинальному массиву
 px2 - указатель для перемещения по результативному массиву
 */
 char x1[40],x2[80],*px1,*px2;

 // Запрос на ввод оригинального массива
 puts( "Enter word (max 39 letters) ");
 gets(x1);
 /*
 записываем адреса начала 
 оригинального и результативного 
 массивов в указатели
 */
 px1 = x1;
 px2 = x2;
 /* 
 вычисляем двойную длину
 оригинального массива
 */
 n = 2*strlen(x1); 

 // записываем в последний элемент 
 // результативного массива '\0'
 *(px2+n) = '\0';

 // цикл поэлементно перебирает
 // оригинальный массив
 while ((*px1)!='\0')
 {
 // записываем значение из текущей позиции
 // оригинального массива в текущую позицию
 // результативного массива, в последнем
 // переходим на один элемент вперёд
 *px2++ = *px1;
 // записываем значение из текущей позиции
 // оригинального массива в текущую позицию
 // результативного массива, в обоих массивах
 // переходим на один элемент вперёд
 *px2++ = *px1++; 
 }
 // демонстрируем результативный массив
 puts(x2);
}

Категория: C | Добавил: DEN-SHP (05.11.2012)
Просмотров: 792 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]