Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 47 из 87<  1 ... 44  45  46  47  48  49  50 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
Russian
строки сравниваються функцией int strcmp(str1, str2) (или "аналогами" многочисленными). Результат 0 если строки равны, положительное либо отрицательное число, если строки не равны. Проверяя знак этого числа, можно регулировать сортировку по убыванию либо по возрастанию.



Партнер
 

Member
Статус: Не в сети
Регистрация: 08.05.2006
Откуда: СПБ
mein а теперь объясни

_________________
Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
Russian всёже просто. Предполагаем что вы способны выполнить сортировку например массива с числами. В коде обязательно будет участок где числа сравниваются и в зависимости от результата производится перестановка. Тоесть что-то около того if (mas[i] > mas[i+1] ) <перестановка> . Если массив не чисел а строк(к примеру массив указателей), то почти тоже самое: if( strcmp(mas_str[i], mas_str[i+1]) > 0 ) <перестановка>. Также предполагается, что вы знаете что такое "массив строк" .


 

Member
Статус: Не в сети
Регистрация: 21.01.2004
Откуда: ядерная помойка
mein писал(а):
строки сравниваються функцией int strcmp(str1, str2)

и причём тут это? Итак очевидно, что строки разные (иначе зачем их сортировать?)

Если можно писать на С++, то можно читать строки в массив std::vector<std::string> а затем использовать std::sort().

_________________
memento mori


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
ядерный отход Функция strcmp не просто говорит равны строки или нет, а говорит какая из строк "больше"/"меньше" второй. Это и позволяет её использовать в данном случае. Насчёт STL то да, конечно так проще, но тут скорее всего цель задания другая.


 

Member
Статус: Не в сети
Регистрация: 21.01.2004
Откуда: ядерная помойка
а, понял. Тогда можно использовать qsort, а strcmp использовать в составе функции сравнения, указатель на которую и будет в параметрах qsort.

_________________
memento mori


 

Member
Статус: Не в сети
Регистрация: 08.05.2006
Откуда: СПБ
можно ли как-нибудь в С глобально присвоить массиву значению
пишу
float v[MAX];
v[0]=0;
v[1]=70;
v[2]=10;
v[3]=5;
выдает ошибку хотя если так объявлять локально то все норм

_________________
Мы все знаем, что Linux — это круто… он выполняет бесконечные циклы за 5 секунд.
* Линус Торвальдс


 

Advanced member
Статус: Не в сети
Регистрация: 09.03.2004
Откуда: Кишинёв
Russian писал(а):
можно ли как-нибудь в С глобально присвоить массиву значению пишу

Код:
float v[MAX];
v[0]=0;
v[1]=70;
v[2]=10;
v[3]=5;

Так ведь "глобально" такие вещи не делаются :) . Подобные действия допустимы только в функциях. Инициализировать массив можно вот так:
Код:
float v[MAX] = { 0, 70, 10, 5 };

где MAX константа, и инициализирующих значений можно "<=" MAX .


 

Member
Статус: Не в сети
Регистрация: 21.01.2004
Откуда: ядерная помойка
Russian писал(а):
пишуfloat v[MAX];v[0]=0;v[1]=70;v[2]=10;v[3]=5;выдает ошибку хотя если так объявлять локально то все норм


и правильно ругается.
надо писать так:

Код:
float* v = new float[MAX]


P.S. и не забудь потом
Код:
delete [] v;

Добавлено спустя 7 минут, 19 секунд
прошу прощения, если нужен чистый Си, то вместо new float[MAX] нужно так:
Код:
 (float[MAX]) malloc(sizeof(float)*MAX);


а вместо delete [] v - free(v)
Добавлено спустя 3 часа, 21 минуту, 58 секунд
P.S. естественно,
Код:
v[0]=0;
v[1]=70;
v[2]=10;
v[3]=5;

можно делать только в функциях.

_________________
memento mori


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Код:
(float[MAX]) malloc(sizeof(float)*MAX);


Классное приведения типов :-D

Russian еще лучше float v[MAX] = { 0f, 70f, 10f, 5f };
Чтобы без неявного приведения типов.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 21.01.2004
Откуда: ядерная помойка
Daemon писал(а):
Классное приведения типов

сам тащусь.
(float*)

_________________
memento mori


 

Member
Статус: Не в сети
Регистрация: 20.11.2005
Откуда: Орск
Ребята, нужна помощь.... может вопрос конечно и слишком простой... но я уже незнаю просто как делать... много вариантов перепробовал... не получается :(
Суть задачи: Дан массив целых чисил а(40), при помощи массива указателей вывести числа этого массива по принципу: первый, последний, второй, предпоследний, и т.д... по идеи код тут прост, просто не пойму в чем ошибка %), это одна из задач курсовой....
Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{  clrscr();
    printf("\n\t\t\tMACCuB A\n");
    int i,k=0,a[40],*s[40];
    for (i=0;i<40;i++)
    {  a[i]=random(100)-21;
         //s[i]=&a[i];
         printf("%5d",a[i]);
    }
    for (i=0;i<40;i+=2)
    s[i]=&a[i];
    for (i=40;i<0;i-=2)
    s[i]=&a[i];
      printf("\nMaccuB S\n");
               for (i=0;i<40;i++)

      printf("%5d",*s[i]);
}

еще много вариантов перепробовал %) этот мне кажется наиболее ближе к реальности...

_________________
Вот моя персональная страница:
http://people.overclockers.ru/vanch


 

Member
Статус: Не в сети
Регистрация: 21.01.2004
Откуда: ядерная помойка
V@nch
может, так?
Код:
for (i=0; i<n; i+=2)
   {
      s[i]=&a[i/2];
      s[i+1] = &a[n-i/2-1];

   }

_________________
memento mori


 

Member
Статус: Не в сети
Регистрация: 20.11.2005
Откуда: Орск
Разобрался в задаче :) нужно было вводить дополнительный массив, и через него делать...
Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{ int a[40],*b[40],*p[40];
   int i,t,n,k;
   randomize();
   clrscr();
   printf("\nMaCCuB A(40)\n");
   for (i=0;i<40;i++)
    { a[i]=rand()%30-5;
       b[i]=&a[i];
       printf("%5d",a[i]);
    }
   for (i=0,t=0;i<20;i++)
    { p[t]=b[i];
       t++;
         p[t]=b[39-i];
          t++;
    }

   printf("\n\n\n\n HoBbIy MaccuB\n");
    for (i=0;i<t;i++)
       printf("%5d",*p[i]);

_________________
Вот моя персональная страница:
http://people.overclockers.ru/vanch


 

Member
Статус: Не в сети
Регистрация: 21.01.2004
Откуда: ядерная помойка
V@nch писал(а):
нужно было вводить дополнительный массив

это где-то в условии сказано? Потому что иначе этот массив ну совершенно бессмысленен

_________________
memento mori


 

Member
Статус: Не в сети
Регистрация: 20.11.2005
Откуда: Орск
нет, этого в условии не было... решать можно любым удобным способом, главное результат :)

_________________
Вот моя персональная страница:
http://people.overclockers.ru/vanch


 

Member
Статус: Не в сети
Регистрация: 21.01.2004
Откуда: ядерная помойка
V@nch писал(а):
нет, этого в условии не было... решать можно любым удобным способом, главное результат

и зачем тогда вводить массив b, если он полностью повторяет массив а?

_________________
memento mori


 

Member
Статус: Не в сети
Регистрация: 20.11.2005
Откуда: Орск
решать можно любым способом, но тематика решения, через указатели :) в данном случае массив b это массив указателей

_________________
Вот моя персональная страница:
http://people.overclockers.ru/vanch


 

Member
Статус: Не в сети
Регистрация: 21.01.2004
Откуда: ядерная помойка
V@nch
дело в том, что p - это тоже массив указателей, и непонятно, зачем вводить лишний массив

_________________
memento mori


 

Member
Статус: Не в сети
Регистрация: 12.07.2006
Откуда: Kiev
пишу шаблон функции, компилятор gcc (mingw), получаю ошибку
Цитата:
undefined reference to `void PrintRgFistDim<int>(int *, unsigned long, unsigned long, unsigned long)'

при вызове соотв. ф-ции.
аналогично при любых других типах данных.

самое интересное, что если кинуть весь код из array_form.cpp в main.cpp то все работает)
в чом может быть проблема?

main.cpp
Код:
#include <iostream.h>
#include <windows.h>
#include <time.h>
#include "array_format.h"


int main()
{
    // CONST ULONG ixnMax = 3;
    CONST ULONG iynMax = 5;

    int rgn1D[iynMax];

    // заполняем массив

    srand(time(NULL));

    for (int iyn = 0; iyn <= iynMax; iyn ++)
    {
        rgn1D[iyn] = rand()%50;
    }

    // вызываем шаблонную ф-цию

    PrintRgFistDim(rgn1D, iynMax);

    return 0;
}


array_format.h:
Код:
#ifndef ARRAY_FORMAT_H
#define ARRAY_FORMAT_H

#include <iostream.h>
#include <windows.h>

// Pring arrays functions family
// option format (oct/dec/hex) currently
// unrealize.
// [TODO] create Print Hyper Dimention function
// (require random number input arguments, lenght of
// each vector in hyper array)

#define LY_VER 0
#define LY_HOR 1
#define PRINT_RG_FR_OCT 8
#define PRINT_RG_FR_DEC 10
#define PRINT_RG_FR_HEX 16

template <typename T> VOID PrintRgFistDimHor(T * rg, CONST ULONG iMax, ULONG format = PRINT_RG_FR_DEC);
template <typename T> VOID PrintRgFistDimVer(T * rg, CONST ULONG iMax, ULONG format = PRINT_RG_FR_DEC);
template <typename T> VOID PrintRgFistDim(T * rg, CONST ULONG iMax, ULONG layout = LY_HOR, ULONG format = PRINT_RG_FR_DEC);

#endif // ARRAY_FORMAT_H


array_format.cpp
Код:
#include "array_format.h"


template <typename T> VOID PrintRgFistDimHor(T * rg, CONST ULONG iMax, ULONG format = PRINT_RG_FR_DEC)
{
    for (ULONG i = 0; i <= iMax; i ++)
    {
        cout << rg[i] << " ";
    }
}

template <typename T> VOID PrintRgFistDimVer(T * rg, CONST ULONG iMax, ULONG format = PRINT_RG_FR_DEC)
{
    for (ULONG i = 0; i <= iMax; i ++)
    {
        cout << rg[i];
        cout << endl;
    }
}

template <typename T> VOID PrintRgFistDim(T * rg, CONST ULONG iMax, ULONG layout = LY_VER, ULONG format = PRINT_RG_FR_DEC)
{
    if (layout == LY_VER)
    {
        PrintRgFistDimVer(rg, iMax, format);
    }

    if (layout == LY_HOR)
    {
        PrintRgFistDimHor(rg, iMax, format);
    }
}

_________________
документация документации рознь


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1730 • Страница 47 из 87<  1 ... 44  45  46  47  48  49  50 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan