ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

13.05.2009, 17:50
|
|
Познающий
Регистрация: 05.03.2007
Сообщений: 99
Провел на форуме: 744734
Репутация:
44
|
|
Сообщение от Ra$cal
терь понятно. ща чай допью и сделаю, если никто не потревожит
зы: требование четкое не юзать c++ или это просто так сложилось что лаба на си написана? лень писать самому сортировку, хотел из <algorithm> заюзать, в связке с std::vector. или не канает?
Спасибо конечно, но вообще да, использовать только язык Си. Поэтому не знаю, смогу ли я это всё перевести с языка С++ на C , т.к. очень поверхносто знаю эти языки... Может если будет время, то попробуешь перевести? Да и большинство слов в этом коде для меня как китайская граммота, что-то не припомню чтобы мы в универе что-то подобное делали...
Последний раз редактировалось Mosvit; 13.05.2009 в 17:52..
|
|
|

13.05.2009, 18:40
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
ну вся суть алгоритма - структура, которая содержит индекс строки и сумму его элементов. сортируешь массив структур. потом проходишь по массиву и строишь новую матрицу по одной строке, беря ее из исходной.
Последний раз редактировалось Ra$cal; 13.05.2009 в 20:02..
|
|
|

13.05.2009, 20:06
|
|
Познающий
Регистрация: 17.01.2007
Сообщений: 94
Провел на форуме: 528220
Репутация:
65
|
|
В общем у меня новая проблема) Вроде все математически правильно, только вот компилятор неправильно считает. Я уже незнаю в чем может ошибка заключаться. Если я беру числа 16ные до FF то все нормально работает и преобразуется, но если попадается FF то я получаю странный результат, может кто нить помочь разобраться?
#include <stdio.h>
unsigned int i,k,r,p,t;
unsigned char ch1,ch2;
char array[] = {'0','1','2','3','4','5','6','7','8','9','A','B',' C','D','E','F'};
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
int main (void)
{
ch1='6'; // starshii
ch2='A'; // mladshii
i=k=0;
while(k<17)
{
if(ch1==array[k])
{
r=k;
printf("k %d ",k);
}
k++;
}
while(i<17)
{
if(ch2==array[i])
{
t=(r*16^1+i)-1;
printf("i %d ",i);
printf("Hex %X Decimal %d",t,t);
}
i++;
}
return 1;
}
|
|
|

13.05.2009, 20:21
|
|
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме: 3578578
Репутация:
275
|
|
CHIP )
дебаг в руки
|
|
|

13.05.2009, 20:28
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
покритикуйте вот этот кусок, пожалуйста:
PHP код:
char *qs = new char; // выделили место под новую строку (4 байта? надо ли указывать размер?)
strcpy(qs, "string1"); // внесли туда строку
char *m = new char; // строка 2
strcpy(m, "string2"); // строка 2
char *mp[10]; // создали массив указателей на строки (хотелось бы неограниченный)
int n = 0, i = 0;
mp[n++] = qs2; // внесли указатель на первую строку
mp[n++] = m; // внесли указатель на вторую строку
while(n--)
cout << mp[i++] << endl; // вывели строки (немного извращённо)
Основные вопросы:
0 правильно ли я вношу строку в память?
1 как определить массив указателей на строки без указания размера?
2 правильно ли я добавляю элемент в массив? (вроде нет)
3 как получить кол-во элементов образовавшегося массива? (перебрать его весь, инкрементируя на попадающихся концах строк?)
|
|
|

13.05.2009, 21:21
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
0) нет
ты выделяешь память только под один char, правильно надо указывать размеры массива char[quantity];
1) char** pList; а дальше выделяешь память для массива указателей
как получить кол-во элементов образовавшегося массива?
где то записывать.
З.Ы. код вроде корректен, но не дай боже в нем кому то разбиратся)) все можно было написать гораздо проще)
|
|
|

13.05.2009, 23:14
|
|
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме: 6490435
Репутация:
2290
|
|
как получить кол-во элементов образовавшегося массива?
C или C++?
Если C+, то юзать вектор.
2 правильно ли я добавляю элемент в массив? (вроде нет)
some_vector.push_bask(element)
|
|
|

14.05.2009, 00:15
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
1 как определить массив указателей на строки без указания размера?
char** strings;
но вообще лучше не использовать char* по возможности. благо есть std::string или CString в atl, который аналогичен mfc'шному CString, но работает в проектах без мфц. массивы же менять на вектора. а указатели, как я уже упоминал, заменять на boost::shared_ptr. хорошо помогает от утечек памяти.
|
|
|

14.05.2009, 00:46
|
|
Познающий
Регистрация: 05.03.2007
Сообщений: 99
Провел на форуме: 744734
Репутация:
44
|
|
Вообщем сделал я свою программу , только осталась одна загвостка,
она правильно сортирует строки только тогда когда строго сумма первой строки массива<2-ой строки<суммы 3-ей строки
А если наприер сумма второй строки самая большая, то уже считает с ошибкой.
Сделал по-принципу: присвоил temp1,temp2,temp3 сумму каждой строки, потом сделал проврку с циклом,
типа если temp1<temp2, то поменять строки местами.
Вот код:
Сортировать должен сверху самая большая сумма, ниже меньше
Код:
#include <stdio.h>
#define M 3
#define N 3
#define MAX 100 // наше ограничение
void main(void)
{
int mas[M][N]; // Объявление двумерного массива
int temp[M];
int i,j,temp1,temp2,temp3;
// Ввод массива
for(i=0;i<M;i++) // цикл по строкам
{
for(j=0;j<N;j++) // цикл по элементам строки
{
// Ввод значения элемента массива
printf(" A[%d][%d]=", i, j);
scanf("%d",&mas[i][j]);
}
}
printf("\n");
getch();
//---------------------------------Вывод массива
printf("Ishodniy massiv:");
printf("\n");
for(i=0;i<M;i++) // цикл по строкам
{
for(j=0;j<N;j++) // цикл по элементам строки
{
printf("%4d", mas[i][j]);
}
printf("\n");
}
printf("\n");
// ---------- Обработка и вывод
printf("Otsortirovaniy massiv:\n");
for(i=0; i<=M-2; i++)
{
temp1=0; temp2=0;
for(j=0; j<=N; j++)
{
temp1=temp1+mas[i][j];
temp2=temp2+mas[i+1][j];
temp3=temp3+mas[i+2][j];
if (temp2<temp3)
{
for(j=0; j<=N-1; j++)
{
temp[i]=mas[i+1][j];
mas[i+1][j]=mas[i+2][j];
mas[i+2][j]=temp[i];
}
}
if (temp2<temp1)
{
for(j=0; j<=N-1; j++)
{
temp[i]=mas[i+1][j];
mas[i+1][j]=mas[i][j];
mas[i][j]=temp[i];
}
}
if (temp1<temp2)
{
for(j=0; j<=N-1; j++)
{
temp[i]=mas[i][j];
mas[i][j]=mas[i+1][j];
mas[i+1][j]=temp[i];
}
}
if (temp2<temp3)
{
for(j=0; j<=N-1; j++)
{
temp[i]=mas[i+1][j];
mas[i+1][j]=mas[i+2][j];
mas[i+2][j]=temp[i];
}
}
for (i=0;i<M;i++)
{
for (j=0;j<N;j++)
{
printf("%4d",mas[i][j]);
}
printf("\n");
getch();
}
}
}
/*for (i=0;i<M;i++)
{
for (j=0;j<N;j++)
{
printf("%4d",mas[i][j]);
}
printf("\n");
getch();
}*/
/*// ------- Вывод суммы элементов каждой строки массива
printf("Summa elemenov strok massiva:\n");
for(i=0;i<M;i++)
printf("%4d", mas[i][0]);
getch();*/
}
|
|
|

14.05.2009, 00:55
|
|
Новичок
Регистрация: 13.05.2009
Сообщений: 1
Провел на форуме: 1554
Репутация:
0
|
|
Помогите пожалуйста сделать лабу на Turbo pascal
Условие:
"В заданном пользователем масиве целых чисел найти среднее арифметическое максимального и минимального элементов. Отсортировать полученый масив по условию возростания модуля отклонения его элементов от найденого среднего арифметического. Вывести входящий, конечный масивы и найденое среднее арифметическое."
Заранее спасибо!
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|