Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > парочка простеньких задачек по с++


Автор: тобер 10.11.2005, 23:59
магёт быть кто нить подскажет... smile
№1
в каждом столбце и каждой строке матрицы а(n,n) содержиться строго по одному нулевому элементу. перестановкой строк добиться расположения всех нулей по главной диагонали матрицы.

вот что я по быстрому наклепал:
Код


#include <stdio.h>
#include <conio.h>

int i=0;
int n=0;
int j=0;
int t=0;int t1=0;int buf=0;



int PrintArray(int array[100][100], int x)
{
for (i=0;i<x;i++)
{
printf(" \n");
for (j=0;j<x;j++)
{

printf("%d ",array[i][j]);
}
}return 0;
};

void main()
{
int a[100][100];
printf("Vvedite razmernost massivov \n");
scanf("%d",&n);
// Вводим исходный массив A
printf("Vvodim massiv A: \n");
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
printf("vvedite element massiva: \n");
scanf("%d",&a[i][j]);
}

PrintArray(a,n);
printf("\n");
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{ if(a[i][j]=0)
{t=j;t1=i;
for (i=0;i<n;i++)
j=0;j++;
buf=a[t1][j];
a[t1][j]=a[t][j];
a[t][j]=buf;


}
}

PrintArray(a,n);
}








строки не помню ваабще...
№2 В заданном тексте найти самое длинное слово и самую длинную фразу.

№3 в тексте пропущены некоторые слова и словосочетания. они есть в отдельном списке в том порядке в котором должны быть вставлены. места вставки отмечены символом $ . откорректировать текст.

Автор: nikitao 11.11.2005, 20:08
тобер
По поводу 2 и 3.Что непонятно?Если все ,то это в центр помощи,если нет ,то предложите свои идеи,а с проблемными местами мы вам поможем smile

Автор: тобер 11.11.2005, 22:42
а по поводу #1?

Автор: nikitao 11.11.2005, 23:18
Цитата
а по поводу #1?

Лично я не понял ,что тебе надо в 1.Ты хочешь что бы мы проверили правельность кода?

Автор: BreakPointMAN 11.11.2005, 23:53
в #2 можно функцией strtok воспользоваться, например...

в #3 тоже не особо сложно... есть строка с исходным текстом, есть массив строк с словами для вставки в первую строку... выделяешь память, достаточную для того, чтобы разместить там результат... заводишь переменную-счетчик вставленных слов... потом бежишь по строке с исходным текстом, ищешь очередной "$"... натыкаешься - в строку с результатом дописываешь часть строки с исходным текстом до символа "$", затем ту строку из массива, которая соответствует текущему значению переменной-счетчика... увеличиваешь счетчик, если строки из массива не кончились... и бежишь в поисках символа "$" дальше, но не с самого начала, а со следующей позиции... вот... примерно так... ну + проверки там всякие...

Автор: qwartal 12.11.2005, 22:20
Доброго времени суток всем!!!! Друзья помогите пожалуйста решить задачу.

Составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном
парке. Сведения о каждом автобусе включают:

* номер автобуса;
* фамилию и инициалы водителя;
* номер маршрута.

Прошу написать хотя бы начало данной задачи.
Заранее благодарен!
С уважением, Денис.

Автор: nikitao 12.11.2005, 22:23
qwartal,одна тема-один вопрос!!!!

Автор: тобер 13.11.2005, 00:14
в номер 1 она не пашет!
прошу подсказать ошибку(правда чувствую что там ОШИБКА)
С strtok псб в мсднку закинул мысль пошла... =) псб (я ж говорил что по строкам ни одной функции не помню)
а с третьей там запара какая-то, там енто всё ишо динамически приходится (а я этого страсть как не люблю)и не идёт млин мысля хоть ты тресни...
подскажите с третьей плзззззззз!!!
Добавлено @ 00:23

2 BreakPointMAN
с третьей лично у мя не так всё просто пришлось создать ишо один массив строк...
постепенно вырезать из первого и вставлять в новый...
дабы в изначальном каждый $ оставался первым каждый раз...

может есть функция прямой замены символа на строку?
помоги...

Автор: BreakPointMAN 13.11.2005, 00:44
тобер, как именно - в каком виде - у тебя задаются исходные данные в 3 задаче?

Автор: тобер 13.11.2005, 02:55
BreakPointMAN
да как угодно я чуть что сам доделаю можно считывать из файла, можно вводить с клавы ..., можно ваще константной строкой сразу задать вставляемые фразы я так думаю лучше всего будет ввиде массива строк делать

Автор: darkart 13.11.2005, 11:43
По поводу первой:
Код

#include<stdio.h>
const int n=3;
void InputMatrix(int Matrix[n][n])
{
    printf("Please enter a matrix(%dx%d):\n",n,n);
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            scanf("%d",&Matrix[i][j]);
}
void PrintMatrix(int Matrix[n][n])
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n-1;j++)
            printf("%d",Matrix[i][j]);
        printf("%d\n",Matrix[i][n-1]);
    }
}
void Rearrangement(int Matrix[n][n])
{
    int tmp;
    for(int i=0;i<n;i++)
    {
        int j=i;
        while(j<n&&Matrix[j][i]!=0)j++;
        int k=0;
        for(k=0;k<n;k++) 
        {
            tmp=Matrix[i][k];
            Matrix[i][k]=Matrix[j][k];
            Matrix[j][k]=tmp;
        }
    }
}
int main()
{
    int Matrix[n][n];
    InputMatrix(Matrix);
    printf("Source matrix:\n");
    PrintMatrix(Matrix);
    Rearrangement(Matrix);
    printf("Null-diagonal matrix:\n");
    PrintMatrix(Matrix);
    return 0;
}

Автор: тобер 13.11.2005, 13:50
darkart
большое спасибо, оказалось что мне для счастья не хватало буквально одной строчечки : while(j<n&&Matrix[j][i]!=0)j++;
smile

Автор: BreakPointMAN 13.11.2005, 14:48
#3 лови...
сразу предупреждаю - не проверял!!!
возможно, работает криво или вообще не работает... smile
простора для оптимизации - море.
лень было ...
но идея, я думаю, понятна будет.
если непонятна - спрашивай...
Код

#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main()
   {
    char *SourceText="This is $ 1st $ of this $!";
    char *Words[]={"my","test","program"};

    // Подсчет - сколько мы имеем слов для замены?
    int WordsNum=sizeof(Words)/sizeof(Words[0]);
    // Подсчет - длина исходного текста + нуль-символ
    int S=strlen(SourceText)+1;
    // Подсчет - а сколько нам надо места всего?
    for(int i=0; i<WordsNum; i++)
       {
        S+=strlen(Words[i]); // учитываем длину слова-заменителя
        S--; // и не учитываем заменяемый символ '$'
       }
    // Выделим память...
    char *NewText=(char*)malloc(S);
    memset(NewText,'\0', S);

    int CurrentWord=0, iBeg=0, iPos=0;

    // Пробегаемся по всем символам исходного текста
    for(int i=0; i<strlen(SourceText); i++)
       {
        if(SourceText[i]=='$') // нашли очередной '$'
           {
            // Сначала скопируем часть строки до символа '$'
            strncpy(NewText+iPos, SourceText+iBeg, i-iBeg);
            iPos+=(i-iBeg);
            // Затем скопируем соответствующее символу '$' слово
            strcpy(NewText+iPos,Words[CurrentWord]);
            iPos+=strlen(Words[CurrentWord++]);
            iBeg=i+1;
            if(CurrentWord>=WordsNum) break;
           }
       }
    // Копируем то, что осталось...
    strncpy(NewText+iPos, SourceText+iBeg, strlen(SourceText)-iBeg);

    printf("%s",NewText);
    free(NewText);
    getch();
    return 0;
   }

Автор: тобер 13.11.2005, 14:55
BreakPointMAN
darkart
nikitao
всем БОЛЬШОЕ СПАСИБО!!!

Автор: darkart 13.11.2005, 14:59
Всегда пожалуйста smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)