- •Министерство образования Российской федерации новосибирский государственный технический университет
- •Часть 1
- •Работа подготовлена на кафедре
- •Последовательность этапов решения задач при нисходящем проектировании
- •Семь основных элементов программирования.
- •Другие функции вывода: puts() и putchar()
- •Типы данных
- •Использование gets() и getch() для ввода
- •Условные операторы
- •Операции сравнения
- •Логические операции
- •Операторы присваивания
- •Оператор запятая
- •Лабораторная работа № 1 условные операторы. Операторы цикла.
- •Цель работы
- •Общие положения Оператор if
- •Циклические конструкции в программах
- •3. Пример программной реализации
- •4. Варианты заданий
- •5. Контрольные вопросы.
- •Лабораторная работа № 2 массивы целых чисел. Символьные массивы.
- •1. Цель работы.
- •2. Общие положения.
- •3. Примеры программных реализаций
- •Пример 3. Введенное натуральное число записать в виде строки.
- •4. Варианты заданий
- •5. Контрольные вопросы
- •Лабораторная работа № 3 методы сортировки.
- •Цель работы
- •Общие положения
- •Сортировка простыми включениями.
- •Сортировка простым выбором.
- •Сортировка простым обменом.
- •Пример программной реализации
- •Варианты заданий.
- •Лабораторная работа № 4
- •Способы передачи параметров
- •Функция main()
- •Области действия функций. Определения и объявления
- •Примеры программных реализаций
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа № 5 функции. Массивы указателей.
- •Цель работы
- •Общие положения
- •Примеры программных реализаций
- •Варианты заданий
- •Контрольные вопросы
Примеры программных реализаций
Пример 1. Строка содержит не более 10 слов, каждое из которых длиной не более 15 символов. Элементом слова являются русские и латинские буквы и цифры. Разделители между словами и их количество могут быть любые. Необходимо отсортировать слова в строке по возрастанию их длин. Программа должна содержать следующие функции:
разбиения исходной строки на массив слов-строк;
сортировки массива слов;
объединения отсортированного массива слов в строку результата;
определения, является ли символ элементом слова.
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<stdlib.h>
int Letter(char ch)
{
if (isalnum(ch)>0) return 1;
if (((ch>='А')&&(ch<='п'))||
((ch>='р')&&(ch<='я')))return 1;
return 0;
}
int Words(char *str,
char w[][15])
{
int i=0,j,k=0,key=0,
n = strlen(str);
for (j=0; j<=n; j++)
if(Letter(str[j]))
{w[k][i]=str[j];
i++; key=1; }
else
if(key)
{w[k][i]='\0';
i=0; k++;key=0;}
return k;
}
void Sort(char w[][15],
int n)
{
int i, j, l, imin, min;
char temp[15] ;
for (i=0; i<n-1; i++)
{ min=strlen(w[i]);
imin=i;
for(j=i+1; j<n; j++)
{
l=strlen(w[j]);
if (l<min)
{min=l; imin=j;}
}
strcpy(temp,w[i]);
strcpy(w[i],w[imin]);
strcpy(w[imin],temp);
}
}
void Result(char w[][15],
int n,char *res)
{
int i;
strset(res,'\0');
for(i=0; i<n; i++)
{ strcat(res,w[i]);
strcat(res," ");
}
}
void main()
{
int n;
char string[80],word[10][15];
puts("\n Enter string:");
gets(string);
n=Words(string,word);
sort (word,n);
Result(word,n,string);
puts("Result:");
puts(string);
}
Пример 2. Текст задается через массив указателей на начало строк, последний указатель – NULL. Функция ввода строк возвращает адрес начала массива указателей как результат. Подсчитать количество слов в строке и вывести статистику по каждой строке, используя функцию позиционирования курсора на экране gotoxy().
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <alloc.h>
#include <ctype.h>
// Ввод текста
char **Enter()
{
char tmp[80];
char **p =(char**)new char*;
int n = 0; //счетчик строк
while (1)
{
gets (tmp);
if(tmp[0]==0)break;
if(strlen(tmp)>60)tmp[60]=0;
p[n] = (char *)malloc
(strlen(tmp)+1);
strcpy(p[n],tmp);
n++;
p = (char**)realloc
(p, sizeof(char*)*(n+1));
}
p[n]=NULL;
return p;
}
// Подсчёт слов в строке
int Count(char *p)
{
int n = 1;
if (*p =='\0') return 0;
for (p++; *p !='\0'; p++)
if(!Letter(p[0])&&
Letter (p[-1]))n++;
return(n);
}
//Создание массива статистики
int *Stat(char **txt)
{
int i, *count;
// Подсчёт количества строк
for(i=0; txt[i]!=NULL; i++);
//Выделение памяти для
массива статистики
count = (int *)new [i+1];
for (i=0;txt[i]!=NULL;i++)
count[i] = Count(txt[i]);
count[i] = 0;
return count;
}
void Print(char **txt,
int *stat)
{
int i;
for(i=0;txt[i]!=NULL; i++)
{
printf ("%s", txt[i]);
gotoxy (65,i+1);
printf("- %d\n",stat[i]);
}
}
void main ()
{
char **text;
int *stat;
clrscr();
printf ("Введите текст:\n");
text = Enter();
stat = Stat(text);
clrscr();
Print(text, stat);
getch();
}