ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #2961  
Старый 13.05.2009, 17:50
Mosvit
Познающий
Регистрация: 05.03.2007
Сообщений: 99
Провел на форуме:
744734

Репутация: 44
По умолчанию

Цитата:
Сообщение от Ra$cal  
терь понятно. ща чай допью и сделаю, если никто не потревожит

зы: требование четкое не юзать c++ или это просто так сложилось что лаба на си написана? лень писать самому сортировку, хотел из <algorithm> заюзать, в связке с std::vector. или не канает?
Спасибо конечно, но вообще да, использовать только язык Си. Поэтому не знаю, смогу ли я это всё перевести с языка С++ на C , т.к. очень поверхносто знаю эти языки... Может если будет время, то попробуешь перевести? Да и большинство слов в этом коде для меня как китайская граммота, что-то не припомню чтобы мы в универе что-то подобное делали...

Последний раз редактировалось Mosvit; 13.05.2009 в 17:52..
 

  #2962  
Старый 13.05.2009, 18:40
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

ну вся суть алгоритма - структура, которая содержит индекс строки и сумму его элементов. сортируешь массив структур. потом проходишь по массиву и строишь новую матрицу по одной строке, беря ее из исходной.

Последний раз редактировалось Ra$cal; 13.05.2009 в 20:02..
 

  #2963  
Старый 13.05.2009, 20:06
CHIP:))
Познающий
Регистрация: 17.01.2007
Сообщений: 94
Провел на форуме:
528220

Репутация: 65
Отправить сообщение для CHIP:)) с помощью ICQ
По умолчанию

В общем у меня новая проблема) Вроде все математически правильно, только вот компилятор неправильно считает. Я уже незнаю в чем может ошибка заключаться. Если я беру числа 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;
}
 

  #2964  
Старый 13.05.2009, 20:21
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме:
3578578

Репутация: 275
Отправить сообщение для Forcer с помощью ICQ
По умолчанию

CHIP)
дебаг в руки
 

  #2965  
Старый 13.05.2009, 20:28
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

покритикуйте вот этот кусок, пожалуйста:

PHP код:
    char *qs = new char// выделили место под новую строку (4 байта? надо ли указывать размер?)
    
strcpy(qs"string1"); // внесли туда строку

    
char *= new char// строка 2
    
strcpy(m"string2"); // строка 2

    
char *mp[10]; // создали массив указателей на строки (хотелось бы неограниченный)

    
int n 00;

    
mp[n++] = qs2// внесли указатель на первую строку
    
mp[n++] = m// внесли указатель на вторую строку

    
while(n--)
        
cout << mp[i++] << endl// вывели строки (немного извращённо) 
Основные вопросы:

0 правильно ли я вношу строку в память?
1 как определить массив указателей на строки без указания размера?
2 правильно ли я добавляю элемент в массив? (вроде нет)
3 как получить кол-во элементов образовавшегося массива? (перебрать его весь, инкрементируя на попадающихся концах строк?)
 

  #2966  
Старый 13.05.2009, 21:21
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

0) нет
Цитата:
char *qs = new char;
ты выделяешь память только под один char, правильно надо указывать размеры массива char[quantity];
1) char** pList; а дальше выделяешь память для массива указателей
Цитата:
как получить кол-во элементов образовавшегося массива?
где то записывать.
З.Ы. код вроде корректен, но не дай боже в нем кому то разбиратся)) все можно было написать гораздо проще)
 

  #2967  
Старый 13.05.2009, 23:14
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Цитата:
как получить кол-во элементов образовавшегося массива?
C или C++?
Если C+, то юзать вектор.

Цитата:
2 правильно ли я добавляю элемент в массив? (вроде нет)
some_vector.push_bask(element)
 

  #2968  
Старый 14.05.2009, 00:15
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

Цитата:
1 как определить массив указателей на строки без указания размера?
char** strings;
но вообще лучше не использовать char* по возможности. благо есть std::string или CString в atl, который аналогичен mfc'шному CString, но работает в проектах без мфц. массивы же менять на вектора. а указатели, как я уже упоминал, заменять на boost::shared_ptr. хорошо помогает от утечек памяти.
 

  #2969  
Старый 14.05.2009, 00:46
Mosvit
Познающий
Регистрация: 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();*/
}
 

  #2970  
Старый 14.05.2009, 00:55
Etesian
Новичок
Регистрация: 13.05.2009
Сообщений: 1
Провел на форуме:
1554

Репутация: 0
По умолчанию

Помогите пожалуйста сделать лабу на Turbo pascal
Условие:
"В заданном пользователем масиве целых чисел найти среднее арифметическое максимального и минимального элементов. Отсортировать полученый масив по условию возростания модуля отклонения его элементов от найденого среднего арифметического. Вывести входящий, конечный масивы и найденое среднее арифметическое."
Заранее спасибо!
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ