Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Студентам с лабораторными сюда (https://forum.antichat.xyz/showthread.php?t=122076)

BitHack 13.12.2009 22:43

Цитата:

Сообщение от ss88
Вот тебе на С. Дополнительная сортировка номеров столбцов не нужна, т.к. они и так в массиве по-порядку
Код:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

typedef struct {
        int* col_nums;
        int col_count;
} matrix_info_t;

#define N 3

matrix_info_t* scan_matrix(int* M, int n);

int main(int argc, char** argv)
{
        int M[N*N] = {
                5,2,3,
                4,3,2,
                3,4,1
        };
       
        matrix_info_t * m_info = scan_matrix(M, N);
       
        (void)printf("Номера столбцов:\n");
        for(int i = 0; i < m_info->col_count; i++){
                (void)printf("%d ", m_info->col_nums[i]);
        }
       
        (void)printf("\nНомера столбцов в квадрате:\n");
        for(int i = 0; i < m_info->col_count; i++){
                (void)printf("%d ", m_info->col_nums[i]*m_info->col_nums[i]);
        }
       
        (void)printf("\n");
       
        return 0;
}

matrix_info_t* scan_matrix(int* M, int n){
       
        matrix_info_t * ret = malloc(sizeof(matrix_info_t));
        ret->col_count = 0;
       
        for(int j = 0; j < n; j++){
                bool correct_column = true;
                for(int i = 1; i < n; i++){
                        if(M[N*(i - 1) + j] < M[N*i + j]){
                                correct_column = false;
                                break;
                        }
                }
               
                if(correct_column){
                        ret->col_nums = realloc(ret->col_nums, sizeof(int) * ret->col_count++);
                        ret->col_nums[ret->col_count - 1] = j;
                }
        }
       
        return ret;
       
}


я забыл написать, что нужно написать на паскале)))
можешь переписать пожалуйста) :rolleyes:

ss88 13.12.2009 23:20

Цитата:

Сообщение от Nelson17
Дана целочисленная матрица размера m на n. Размер матрицы задается динамически во время выполнения программы. Для хранения элементов матрицы использовать динамическое выделение памяти. Матрица заполняется случайными числами в диапазоне от -50 до 50. Используя алгоритм пузырьковой сортировки отсортировать элементы каждой четной строки по возрастанию, а нечетную - по убыванию. Заполнение матрицы случайными числами, сортировку элементов строк матрицы и вывод матрицы на экран организовать в виде функции.
Задание вроде не сильное с первого взгляда, но написать не могу. Помогите по-возможности. С++

Не путай С и С++
Вот:
Код:

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

void fill_matrix(int* matrix, int m, int n);
void print_matrix(int* matrix, int m, int n);
void sort_matrix(int* matrix, int m, int n);

int main(int argc, char** argv)
{
        int m, n;
        (void) printf("Введите количество строк: ");
        (void) scanf("%d", &m);
        (void) printf("Введите количество столбцов: ");
        (void) scanf("%d", &n);
       
        int * matrix = malloc(m * n * sizeof(int));
       
        fill_matrix(matrix,m,n);
       
        print_matrix(matrix,m,n);
       
        (void) printf("Сортировка\n");
       
        sort_matrix(matrix,m,n);
       
        print_matrix(matrix,m,n);
       
        return 0;
}

void fill_matrix(int* matrix, int m, int n){
        for(int i = 0; i < m; i++){
                for(int j = 0; j < n; j++){
                        int r = rand() % 51;
                        matrix[m*i + j] = (r % 2)?-r:r;
                }
        }
}

void print_matrix(int* matrix, int m, int n){
        (void) printf("\nМатрица [%d,%d]\n", m, n);
       
        for(int i = 0; i < m; i++){
                for(int j = 0; j < n; j++){
                        (void) printf("%3d ", matrix[m*i + j]);
                }
                (void) printf("\n");
        }
        (void) printf("\n");
}

void sort_matrix(int* matrix, int m, int n){
        for(int i = 0; i < m; i++){
                bool cond = true;
                while(cond) {
                        cond = false;
                        for(int j = 0; j < n - 1; j++){
                                if(i % 2){
                                        if(matrix[m*i + j] < matrix[m*i + j + 1])
                                                cond = true;
                                } else {
                                        if(matrix[m*i + j] > matrix[m*i + j + 1])
                                                cond = true;
                                }
                               
                                if(cond){
                                        int swp = matrix[m*i + j];
                                        matrix[m*i + j] = matrix[m*i + j + 1];
                                        matrix[m*i + j + 1] = swp;
                                }
                        }
                }
        }
}

Результаты в таком виде:
Цитата:

rocky@rocky-laptop:~$ ./s
Введите количество строк: 4
Введите количество столбцов: 4

Матрица [4,4]
10 -49 -9 34
32 -37 -37 48
-45 -19 -5 -31
20 -19 -29 22

Сортировка

Матрица [4,4]
34 10 -9 -49
-37 -37 32 48
-5 -19 -31 -45
-29 -19 20 22
Если не захочет компилироваться в среде, которую ты используешь, то заюзай gcc:
Цитата:

rocky@rocky-laptop:~$ gcc -Wall -pedantic -std=c99 simple_lab3.c -o s
Цитата:

я забыл написать, что нужно написать на паскале)))
можешь переписать пожалуйста)
Какая неописюемая наглость :) Не могу, я паскаль последний раз видел на 1-м курсе, а это было лет 7 назад, но я запомнил, что его лучше не видеть :)
Перепиши сам, это не трудно

cheater_man 13.12.2009 23:27

Как считать данные из файла *.txt в Turbo C?

ss88 13.12.2009 23:31

fscanf

Algol 13.12.2009 23:54

Цитата:

Сообщение от Alexey2
А как бы ты реализовал по - другому...?

Ну например так

Код:

function proverk (a:array of integer):integer;
  const seqLength = 3;
  var
    i:integer;
    counter: integer;
  begin
    counter := 0;
    for i:=0 to length(a) do
      if a[i] mod 2 <> 0 then
      begin
        counter := counter + 1;
        if(counter=seqLength) then
          begin
          proverk := i- seqLength + 1;
          exit;
          end
      end
      else
        counter := 0;

      proverk:=0;
  end;


Suliman36 14.12.2009 00:24

Помогите пожалуйто реализовать на C++ следующее:
есть файл 1.txt
содержание:
Код:

1
12
123
...

есть файл 2.txt
содержание:
Код:

a
ab
abc
...

нухно из этих двух файлов получить файл 3.txt с содержанием:
Код:

1;a
1;ab
1;abc
12;a
12;ab
12;abc
123;a
123;ab
123;abc
...


Alexey2 14.12.2009 01:54

Algol и Thenno бальшущее спасибо:)

PALMA 14.12.2009 08:38

помогите пожалуйста решить задачи

http://pic.ipicture.ru/uploads/09121...RBnGl23L5Q.jpg

marcos 14.12.2009 14:58

Помогите решить:
 
По заданной сетке букв рахмером m*x и списку слов определить позицию в сетке, в которой находится это слово. Слово в сетке может распологаться только по прямой непрерывной линии букв. Регистр букв значения для совпадения не имеет (т.е. строчные и прописные буквы считаются одинаковыми). Слово может распологаться в любом из 8 диагоналей, горизонтальных и вертикальных направлений.

Дается дв числа 1<=m,n<=50. Следующие m строк содержат ровно по n букв каждая. В сетке могут быть и прописные и заглавные буквы. Далее следует число k(при чем 1<=k<=20). Следующие К строк содержат список слов для поиска, одно слово в строке. Эти строки состоят из букв, никаких пробелов, дефисов и других симолов.

Rammstex 14.12.2009 15:19

Такой вопрос. 16 января экзамен по инфе(теория, язык C).
Кто мог бы (согласен даже за умеренную плату) находиться с утра в ICQ, дабы помочь?


Время: 21:49