Определить количество строк, не содержащих ни одного нулевого элемента - C (СИ)
Формулировка задачи:
Дана целочисленная прямоугольная матрица. Определить:
1. Количество строк, не содержащих ни одного нулевого элемента;
2. Максимальное из чисел, встречающихся в заданной матрице более одного ра
Как бе сделал, но что-то не работает. Понты, с передачей указателя на массив.
Можно ее на C# проще решить???
#include "stdafx.h"
#include "conio.h"
#include "time.h"
#include "stdlib.h"
int st=0,s=0;
void mas2(int n, double *p[])
{
for(int i=0;i<n;i++)
{ if(s!=0) st++;
s=0;
for(int j=0;j<n;j++)
{
if(p[i][j]=0) s++;
}}
}
int _tmain(int argc, _TCHAR* argv[])
{
double m[4][4];
srand(time(NULL));
for(int i=0;i<5;i++)
{for(int j=0;j<5;j++)
m[i][j]=rand()%10;}
double *ptr[]={ (double*)&m[0], (double*)&m[1], (double*)&m[2], (double*)&m[3] };
mas2(4,ptr);
return 0;
}Решение задачи: «Определить количество строк, не содержащих ни одного нулевого элемента»
textual
Листинг программы
class Program
{
private static Random rnd = new Random();
private static int Generator()
{
return (int)(rnd.NextDouble()*10);
}
private static void FTask(int [,]matr, int n)
{
int m = matr.Length / n;
int i, j, count_r = 0;
for(i = 0; i < n; ++i)
{
for(j = 0; j < m; ++j)
if(matr[i, j] == 0)
break;
if(j == m)
++count_r;
}
Console.WriteLine("\nКоличество строк, не содержащих ни одного
нулевого элемента:\n< {0}", count_r);
}
private static void STask(int[,] matr, int n)
{
int m = matr.Length / n;
int size = matr.Length;
int i, j, k = 0;
int []mas = new int[size];
for(i = 0; i < n; ++i)
for(j = 0; j < m; ++j)
mas[k++] = matr[i, j];
for(i = 0; i < size; ++i)
for(j = 0; j < size - i - 1; ++j)
if(mas[j] < mas[j + 1])
{
mas[j] ^= mas[j + 1];
mas[j + 1] ^= mas[j];
mas[j] ^= mas[j + 1];
}
for(i = 0; i < size - 1; ++i)
if(mas[i] == mas[i + 1])
{
Console.WriteLine("\nМаксимальное из чисел, встречающихся в заданной
матрице более одного раза:\n< {0}", mas[i]);
break;
}
}
public static void Main(string[] args)
{
int n, m, i, j;
int[,] mas;
Console.Write("Количество строк:\n> ");
n = Int32.Parse(Console.ReadLine());
Console.Write("Количество столбцов:\n> ");
m = Int32.Parse(Console.ReadLine());
mas = new int[n, m];
for(i = 0; i < n; ++i)
for(j = 0; j < m; ++j)
mas[i, j] = Generator();
Console.WriteLine("\nМатрица:");
for(i = 0; i < n; ++i, Console.WriteLine())
for(j = 0; j < m; ++j)
Console.Write("{0} ", mas[i, j]);
FTask(mas, n);
STask(mas, n);
Console.WriteLine();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
Объяснение кода листинга программы
- Объявляется класс Program.
- В классе объявляется приватный статический метод Generator, который генерирует случайное число от 0 до 9.
- В классе объявляется приватный статический метод FTask, который считает количество строк матрицы, не содержащих ни одного нулевого элемента.
- В классе объявляется приватный статический метод STask, который сортирует матрицу по возрастанию и находит число, которое встречается в матрице более одного раза.
- В методе Main создается матрица заданного размера, заполняется случайными числами и выводится на экран.
- Вызывается метод FTask для подсчета количества строк, не содержащих ни одного нулевого элемента.
- Вызывается метод STask для поиска максимального числа, встречающегося в матрице более одного раза.
- Выводится сообщение
Press any key to continue . . .и ожидается нажатие клавиши.