1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Задача: Файловый ввод/вывод, Строки, разные методы сортировки строк

Тема в разделе "Вопросы новичков и не только", создана пользователем Nstudent, 1 дек 2010.

Статус темы:
Закрыта.
  1. Nstudent

    Nstudent Гость

    Репутация:
    0
    помогите найти ошибку
    само задание-два массива строк, каждый из них чортируется методом пузырька, а затем оба в один-слиянием.
    #include<iostream>
    #include<string.h>
    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    typedef char *pChar;
    typedef char **ppChar;

    FILE*out1,*out2,*out3;
    void main()
    {out1=fopen("text1.txt","r");
    out2=fopen("text2.txt","r");
    out3=fopen("text3.txt","w");
    int i,j,m,n,kolstrA,kolstrB;
    char in[80];
    char an[80];
    char*pa[100];
    char*pb[100];
    char*pc[100];
    char*pk[100];
    char a[100][80];
    char b[100][80];
    char c[200][80];


    for (kolstrA=0;kolstrA<100;kolstrA++)
    {if(fgets(in,80,out1)==NULL)
    {break;};
    in[80]='\0';
    strncpy(a[kolstrA],in,80);};
    fclose(out1);
    for(kolstrB=0;kolstrB<100;kolstrB++)
    {if(fgets(an,80,out2)==NULL)
    {break;};
    an[80]='\0';
    strncpy(b[kolstrB],an,80);};
    fclose(out2);

    for(i=0;i<=kolstrA;i++)
    {pa=a;};
    for(j=0;j<=kolstrB;j++)
    {pb[j]=b[j];};
    for(m=0;m<=(kolstrA+kolstrB);m++)
    {pc[m]=c[m];};
    i=0;
    j=0;
    m=0;
    for(i=0;i<=kolstrA-2;i++)
    for(j=i+1;j<=kolstrA-1;j++)
    {if(strcmp(pa,pa[j])<0)
    {strcpy(pk,pa);
    strcpy(pa,pa[j]);
    strcpy(pa[j],pk);};};
    for(i=0;i<=kolstrB-2;i++)
    for(j=i+1;j<=kolstrB-1;j++)
    {if(strcmp(pb,pb[j])<0)
    {strcpy(pk,pb);
    strcpy(pb,pb[j]);
    strcpy(pb[j],pk);};};
    do
    {if(strcmp(pa,pb[j])<0)
    {pc[m]=pa;
    i=i+1;
    m=m+1;}
    else
    {pc[m]=pb[j];
    j=j+1;
    m=m+1;};}
    while(i<kolstrA||j<kolstrB);
    while(j<=kolstrB)
    {pc[m]=pb[j];
    j=j+1;
    m=m+1;};
    while(i<=kolstrA)
    {pc[m]=pa;
    i=i+1;
    m=m+1;};
    cout<<"rezultat"<<"\n";
    for(m=0;m<(kolstrA+kolstrB);m++)
    {printf("%s\n",pc[m]);};
    return;
    }
    выводит:
    error C2664: strcpy: невозможно преобразовать параметр 2 из 'char *[100]' в 'const char *'
    Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
     
  2. DarkKnight

    DarkKnight Well-Known Member

    Репутация:
    0
    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Объясните пожалуйста вот этот момент?
    Это зачем?

    Добавлено:
    Я в алгоритм не вникал, просто все ошибки которые ярко бросились в глаза я вам прокомментировал
    Код:
    #include<iostream>
    #include<string.h>
    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    using namespace std;
    //typedef char *pChar;
    //typedef char **ppChar;
    
    //Код читать очень-очень сложно
    FILE*out1,*out2,*out3;
    void main()
    {
    out1=fopen("text1.txt","r");
    out2=fopen("text2.txt","r");
    out3=fopen("text3.txt","w");
    int i,j,m,n,kolstrA,kolstrB;
    char in[80];
    char an[80];
    char*pa[100];
    char*pb[100];
    char*pc[100];
    char*pk[100];
    char a[100][80];
    char b[100][80];
    char c[200][80];
    
    for (kolstrA=0;kolstrA<100;kolstrA++)
    {
    if(fgets(in,80,out1)==NULL)
    {
    break;
    };
    in[80]='\0';
    strncpy(a[kolstrA],in,80);
    };
    fclose(out1);
    for(kolstrB=0;kolstrB<100;kolstrB++)
    {
    if(fgets(an,80,out2)==NULL)
    {
    break;
    };
    an[80]='\0';
    strncpy(b[kolstrB],an,80);};
    fclose(out2);
    
    for(i=0;i<=kolstrA;i++)
    {
    pa[i]=a[i];
    };
    for(j=0;j<=kolstrB;j++)
    {
    pb[j]=b[j];
    };
    for(m=0;m<=(kolstrA+kolstrB);m++)
    {
    pc[m]=c[m];
    };
    i=0;
    j=0;
    m=0;
    for(i=0;i<=kolstrA-2;i++)
    {
    for(j=i+1;j<=kolstrA-1;j++)
    {
    if(strcmp(pa[i],pa[j])<0)
    {
    strcpy(pk,pa[i]); // Вот смотрите в этом месте у вас pk определена как массив строк(указатель на массив указателей)
    // иными словами как char** prk; А strcpy - не работает с массивом строк, а только с массивом символов char*
    //Так что добавьте индекс pk[i] 
    strcpy(pa[i],pa[j]);
    strcpy(pa[j],pk);};}; //Тут та же история
    for(i=0;i<=kolstrB-2;i++)
    {
    for(j=i+1;j<=kolstrB-1;j++)
    {
    if(strcmp(pb[i],pb[j])<0)
    {
    strcpy(pk,pb[i]); // И тут таже история
    strcpy(pb[i],pb[j]);
    strcpy(pb[j],pk); //И тут
    };
    }; 
    do
    {
    if(strcmp(pa[i],pb[j])<0)
    {
    pc[m]=pa[i];
    i=i+1;
    m=m+1;
    }
    else
    {
    pc[m]=pb[j];
    j=j+1;
    m=m+1;
    };
    }
    while(i<kolstrA||j<kolstrB); //В этом месте совершенно не понял что вы этим хотели сказать
    while(j<=kolstrB)
    {
    pc[m]=pb[j];
    j=j+1;
    m=m+1;
    };
    while(i<=kolstrA)
    {
    pc[m]=pa[i];
    i=i+1;
    m=m+1;
    };
    cout<<"rezultat"<<"\n";
    for(m=0;m<(kolstrA+kolstrB);m++)
    {
    printf("%s\n",pc[m]);
    };
    return;
    }
    }
    }
     
  3. Nstudent

    Nstudent Гость

    Репутация:
    0
    с pk сразу выдает ошибку о преобразовании типов. я попробовала заменить так:
    char pk[80];
    и
    {strcpy(pk,pa);
    strcpy(pa,pa[j]);
    strcpy(pa[j],pk);}

    теперь компилятор ошибок не выдает, но при запуске выводятся некие непонятные символы(вроде скобок)
     
  4. DarkKnight

    DarkKnight Well-Known Member

    Репутация:
    0
    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Скажи что именно делает (или должна делать), твоя программа, так будет легче о чем то конкретном говорить :)
     
  5. Nstudent

    Nstudent Гость

    Репутация:
    0
    Она должна 1)считать строки двух текстовых файлов 2) в обоих файлах отсортировать строки методом пузырька 3) из эти двух файлов создать третий, отсортировав строки слиянием. Ну и обязательно должны использоваться указатели.
     
  6. DarkKnight

    DarkKnight Well-Known Member

    Репутация:
    0
    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Up-Темы
    2 Nstudent : Актуальность темы еще имеется?
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей