Практика программирования (Бейсик, Си, Паскаль)



Задачи, советы и ответы - часть 5


В программе 3_03а.с для размещения фамилий использованы динамически запрашиваемые строки, на начало которых "смотрят" элементы массива указателей типа char (см. обращение к функции malloc). Вместо перестановки фамилий, расположенных не в алфавитном порядке, меняются местами соответствующие 4-байтовые указатели.

Перевод курсора в начало очередной строки списка осуществляется функцией gotoxy (col, row), последовательность параметров которой прямо противоположна соответствующему оператору QBasic.

Программа 3_03b!с построена менее замысловато. В ней использован двумерный массив для хранения фамилий, да и вывод результатов оформлен попроще.

Программа 3_03.bas

RЕМ Сортировка фамилий DIM NAMES(10)

N=10

CLS

FOR J=l TO 10

INPUT "Введи очередную фамилию - ", NAMES(J)

NEXT J CLS

PRINT "Фамилии до упорядочения : " FOR J=l TO N

LOCATE J+2,1: PRINT NAMES(J)

NEXT J

FOR J=l TO N-l

FOR K=J+1 TO N

IF NAME$(J)>NAME$(K) THEN

TMP$=NAME$(J)

NAME$(J)=NAME$(K)

NAMES(K)=TMP$

END IF

NEXT К

NEXT J

LOCATE 1,40

PRINT "Фамилии после упорядочения :"

FOR J=l TO N

LOCATE J+2,40: PRINT NAME$(J)

NEXT J

END

Программа 3_03а.с

/* Сортировка фамилий */

#include <stdio.h>

#include <alloc.h>

#include <conio.h>

#include <string.h>

main()

{

#define n_max 10

#define len_max 20

int j,k;

char tmp[len_max], *names[n_max], *p;

clrscr();

for(j=0; j< n_max; j++) {

printf("\n Введи очередную фамилию - ");

scanf("%s",tmp);

names[j]=(char *)malloc(len_max);

strcpy(names[j],tmp); }

clrscr () ;

printf("Фамилии до упорядочения :");

for(j=0; j<n_max; j++) {

gotoxyd, j+2) ;

printf("%s",names[j]); }

for(j=0; j<n_max-l; j++)

for(k=j+l; k<n_max; k++) {

if (strcmp(names[j],names[k]) > 0} {

p=names[j];

names[j]=names[k] ;

names[k]=p; } }

gotoxy(40,1);

printf("Фамилии после упорядочения :");

for(j=0; j<n_max; j++) {




Содержание  Назад  Вперед