Официальный сайт студ.городка НГТУ
Учеба » Информатика. Изобразите plz блок-схему алгоритма 

#1  25.12.07 19:28

Информатика. Изобразите plz блок-схему алгоритма

Народ, если кому не трудно, выручите пожалуйста! Нужно Изобразить блок-схему алгоритма. Вот прога(по спискам):

!!!!!ЗАПЛАЧУ'!!!!

#include <stdio.h>
#include <malloc.h>
// Список - связанные элементы
struct elem{                    // структура элемента списка
    int d;    // данные
    elem*n;};    // указатель на следующий элемент в списке

elem*newelem(int d1,elem*next)    // получить новый элемент из динамической памяти
{
elem*p=(elem*)malloc(sizeof(elem));
p->d=d1;
p->n=next;
return p;
}

void setlink(elem*p,elem*pn)    // уставить связь
{
    p->n=pn;
}

unsigned int load(char*fname,elem**ph)    // загрузить список из файла
{
FILE*fp;
fp=fopen(fname,"r");    // открыть файл для чтения
int d;
*ph=0;
elem*p=0;
int n=0;
while(fscanf(fp,"%d",&d)==1) {    // прочитать данные
    *ph=newelem(d,*ph);
    n++;
}
    return n;    // вернуть кол-во прочитанных элементов
}

int ins(elem**ph, int k,int d)    // вставить элемент в к -ую позицию списка
{
    if(!ph||!*ph&&k)return 0;

    if(!k){*ph=newelem(d,*ph);return 1;}    // если вставить в голову
    elem*pr=*ph;
    while(pr->n&&--k){pr=pr->n;}    // поиск места вставки

    if(!pr->n&&k>1)return 0;    // вставка
    {pr->n=newelem(d,pr->n);}
    return 1;
}

int swap(elem**ph,int k1,int k2)    // Поменять местами корректируя значения
{
    if(!*ph)return 0;
    if(k1==k2)return 1;
    if(k2<k1){int t=k2;k2=k1;k1=t;}    // коррекция позиций обмена

    elem*p1=*ph,*p2;
    while(p1&&k1)p1=p1->n,k1--,k2--;    // поиск первой позиции

    if(k1||!p1)return 0;
    p2=p1;
    while(p2&&k2)p2=p2->n,k2--;            // поиск второй позиции
    if(k2||!p2)return 0;
   
    int t=p1->d;p1->d=p2->d;p2->d=t;    // обмен данными
    return 1;
}

int get(elem*ph,int k)    // получить значение и-того элемента
{
    elem*p=ph;
    while(p&&k)p=p->n,k--;    // поиск элемента с переданным номером

    if(k||!p)return -1;
    return p->d;
}

int swaplinks(elem**ph,int k1,int k2)    // поменять местами, корректируя связи
{
    if(!*ph)return 0;
    if(k1==k2)return 1;
    if(k2<k1){int t=k2;k2=k1;k1=t;}    // коррекция позиций обмена


    elem**p1=ph,**p2;
    while(*p1&&k1)p1=&((*p1)->n),k1--,k2--;        // поиск первой позиции

    if(k1||!*p1)return 0;
    p2=p1;
    while(*p2&&k2)p2=&((*p2)->n),k2--;// поиск второй позиции
    if(k2||!*p2)return 0;
   
    if(&((*p1)->n)==p2){    // если идут друг за другом
        elem*p=*p1;
        *p1=*p2;
        p->n=(*p2)->n;
        (*p2)->n=p;
    }
    else {
        elem*p=*p1,*pn=(*p1)->n;    // в общем случае
        *p1=*p2;
        p->n=(*p2)->n;
        *p2=p;
        (*p1)->n=pn;
    }
    return 1;
}

int del(elem**ph,int k)    // удалить элемент из списка
{
    if(!ph||!*ph)return 0;

    if(!k){*ph=(*ph)->n;return 1;}
    elem*pr=*ph;
    while(pr->n&&--k){pr=pr->n;}    // поиск элемента
    if(k||!pr->n)return 0;
    elem*p=pr->n;    // вырезание элемента из списка
    pr->n=pr->n->n;
    free(p);
    return 1;
}


void show(elem*ph){    // Показать все элементы списка
    if(!ph){printf("Empty\n");return;}
    while(ph){printf("%d,",ph->d);ph=ph->n;}    // просмотр каждого элемента и вывод его значения
    printf("\n");
}

int main(){

    elem*ph=0;    // Указатель на головной элемент
    load("c:\\list.txt",&ph);    //  Чтение из файла
    show(ph);
    ins(&ph,0,111);
    ins(&ph,3,333);
    ins(&ph,10,999);
    show(ph);
    swap(&ph,0,10);
    swap(&ph,3,5);
    show(ph);
    swaplinks(&ph,0,10);
    swaplinks(&ph,3,5);
    show(ph);
    for(int i=5;i>=0;i--){ // удаление 6 элементнов с середины
        del(&ph,i);
        show(ph);
    }
    for(int i=4;i>=0;i--){// остальных с конца
        del(&ph,i);
        show(ph);
    }   
    return 0;
}

Исправлено GREY989 (25.12.07 19:42)

Offline

Учеба » Информатика. Изобразите plz блок-схему алгоритма 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.288 сек.
Выполнено 14 запросов.